这题说的是给了一个序列1到n然后你从1 位置开始数k个删除,直到最后每个数都被删除了。我们考虑1个数在被删除前后的位置,比如现在在i位置那么 回到删除当前的最后一个是 (i+k)L 了为删除前 的 个数, 这样我们每次重新排序后就知道他在什么位置了
这样模拟着三个数就可以了不断的往回退
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int main() { int cas; scanf("%d",&cas); for(int cc=1; cc<=cas; ++cc){ int n,k; scanf("%d%d",&n,&k); int a,b,c; a=0; a=(a+k)%2; if(a==0) b=1; else b=0; a=(a+k)%3; b=(b+k)%3; for(int i=0; i<3; ++i) if(i!=a&&i!=b){ c=i; break; } for(int i=4; i<=n; ++i){ a=(a+k)%i; b=(b+k)%i; c=(c+k)%i; } printf("%d %d %d\n",c+1,b+1,a+1); } return 0; }
原文:http://www.cnblogs.com/Opaser/p/4060775.html