本文共 1278 字,大约阅读时间需要 4 分钟。
题解:经典的约瑟夫环问题
参考
如果不一次处理完,重复操作可能超时
C++版本一
/**@Author: STZG*@Language: C++*/#include#include #include #include #include #include #include #include #include #include #include #include #include #include #include
C++版本二
题解:
因为一直k 是233,所有人站成一个环,如果知道了x 个站成一个环的时候,出去人的相对顺序(最后一个出去的人的序列是1,第一个出去的人的编号是x),那么可以通过这个顺序知道x+1 个人占成一个环的时候,出去的相对顺序。即找到编号为x 的人,往前数232 个人和第233 个人之间插入一个位置,这个位置就是编号为x+1 的人。
#includeusing namespace std;const int N = 1e5 + 10;int f[N];int main(){ f[1] = 0; for(int i = 2; i < N; ++i) f[i] = (f[i - 1] + 233) % i; int t; scanf("%d", &t); while(t--){ int n; scanf("%d", &n); printf("%d\n", f[n] + 1); } return 0;}
转载地址:http://myzof.baihongyu.com/