标签:
这个题的意思是给你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; }
标签:
原文地址:http://www.cnblogs.com/xingxing1024/p/5272244.html