中文题,题意一看就是卧槽,这不约瑟夫么,然后脑子一抽就用了链表写,然后果然T了,最后用Vector模拟的约瑟夫问题。
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <queue> #include <iomanip> #include <algorithm> #include <vector> #define LL __int64 using namespace std; int n,m; vector<int>p; int flag[55000]; int main() { int cnt; int s; while(scanf("%d%d",&n,&m)!=EOF) { s=2*n; p.clear(); for(int i=1;i<=s;i++) { p.push_back(i); flag[i]=0; } cnt=1; while(s>n) { cnt+=m-1; if(cnt<=s) { flag[p[cnt-1]]=1; p.erase(p.begin()+cnt-1); if(cnt==s) { cnt=1; } } else { cnt%=s; if(cnt==0) { cnt=s; } flag[p[cnt-1]]=1; p.erase(p.begin()+cnt-1); if(cnt==s) { cnt=1; } } s--; } for(int i=1;i<=2*n;i++) { if(flag[i]) { cout<<"B"; } else { cout<<"G"; } if(i%50==0) { cout<<endl; } } cout<<endl; cout<<endl; } return 0; }
原文地址:http://blog.csdn.net/q295657451/article/details/39034759