首页 > 学院 > 开发设计 > 正文

HDU 5643 King's Game (约瑟夫环问题的变形 递推)

2019-11-10 18:51:17
字体:
来源:转载
供稿:网友

大体题意:

有n 个人,进行比赛,第一轮比赛 从1开始报数,报到1的出局,第二轮报2,,,,  问最后谁没出局?

思路:

一看就是约瑟夫环问题的变型了。

在简单记录一下思考的过程吧:

n 个人 编号为0,1,2,,,,,n-1.

假设这一局k-1 出局了。

那么重新编号:

k  k+1 k+2,,,, n-1  0 1   k-2

0  1     2                           n-2

这n -2 个人进行比赛。

那么我们给他变回去即可!

怎么变呢? 显然是(x + k) % n = f[n]

但是这里k 是变化的,当i 为2 时  只有两个人  显然报数是 n-i+1.

详细见代码:

#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int f[5007];int main(){    int T;    scanf("%d",&T);    while(T--){        int n;        scanf("%d",&n);        f[1] = 0;        for (int i = 2; i <= n; ++i){            f[i] = (f[i-1] + n-i+1) % i;        }        PRintf("%d/n",f[n]+1);    }    return 0;}

King's Game

Time Limit: 2000/1000 MS (java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 703    Accepted Submission(s): 390Problem DescriptionIn order to remember history, King plans to play losephus problem in the parade gap.He calls n(1≤n≤5000) soldiers, counterclockwise in a circle, in label 1,2,3...n.The first round, the first person with label 1 counts off, and the man who report number 1 is out.The second round, the next person of the person who is out in the last round counts off, and the man who report number 2 is out.The third round, the next person of the person who is out in the last round counts off, and the person who report number 3 is out.The N - 1 round, the next person of the person who is out in the last round counts off, and the person who report number n−1 is out.And the last man is survivor. Do you know the label of the survivor? InputThe first line contains a number T(0<T≤5000), the number of the testcases.For each test case, there are only one line, containing one integer n, representing the number of players. OutputOutput exactly T lines. For each test case, print the label of the survivor. Sample Input
223 Sample Output
22Hint:For test case #1:the man who report number $1$ is the man with label $1$, so the man with label $2$ is survivor.For test case #1:the man who report number $1$ is the man with label $1$, so the man with label 1 is out. Again the the man with label 2 counts $1$,  the man with label $3$ counts $2$, so the man who report number $2$ is the man with label $3$. At last the man with label $2$ is survivor. SourceBestCoder Round #75 Recommendwange2014   |   We have carefully selected several similar problems for you:  6014 6013 6012 6011 6010  


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表