HDU5860 Death Sequence
2016 Multi-University Training Contest 10
题意:n个人报数,每一轮报数(i*k+1)的人淘汰,到队列末尾后剩余人员进行新一轮报数,直至全员淘汰。给定m次查询,求第j个出队者的序号。 - 原题链接
类约瑟夫问题,但是不成环。
本题种当前总人数为n,编号1-n,则本轮i%k==1的人淘汰,淘汰总人数为(n+k-1)/k。剩下的人从1开始重编号,重复上一轮的过程。设i为第f[i]轮第g[i]个出局,则有以下递推关系式:12f[i]=(i%k==1) ? 1 : f[i-(i+k-1)/k]+1;g[i]=(i%k==1) ? (i+k-1)/k : g[i-(i+k-1)/k];
预处理出前j轮淘汰的总人数cnt[j],则i的出队序号为cnt[f[i]-1]+g[i]。
|
|