码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 5643 约瑟夫环的应用

时间:2016-03-13 17:52:33      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:

  这个题的意思是给你n个人围成一圈, 刚开始报1的人自杀, 接下来报2的人自杀, 依次类推, 问最后剩下的人是谁? 我们可以定义f[i][j] 为一共有i个人 开始依次报j j+1 j+2的人自杀, 那么f[i][j] = (f[i-1][j+1] + j)%i, f[1][j] = 0;代码如下:

#include <bits/stdc++.h>

using namespace std;
int f[2][5000+100];
int res[5000+10];
int main()
{
    int T;
    scanf("%d", &T);
    res[1] = 0;
    for(int i=2; i<=5000; i++)
    {
        for(int j=1; j<=5000; j++)
        if(j+1 <= 5000)
            f[i%2][j] = (f[(i-1)%2][j+1]+j)%i;
        res[i] = f[i%2][1];
    }
    while(T--)
    {
        int n;
        scanf("%d", &n);
        printf("%d\n", res[n]+1);
    }
    return 0;
}

 

HDU 5643 约瑟夫环的应用

标签:

原文地址:http://www.cnblogs.com/xingxing1024/p/5272244.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!