PKU 1012 Joseph
http://poj.org/problem?id=1012
k*2の人がいる。ヨセフスの問題のように間隔mで一人ずつ減らしていくとき、最初のk人が全員残り、あとのk人が全員除外されるような状態になりうるmのうち最小のものを求めるというような問題。
やっと問題の意味が把握できました。
あと、自分の解法だと1秒じゃとても間に合わないので、埋込みしました。
一応計算に使ったソースも貼りつけておきます。
int ans[]={0,2,7,5,30,169,441,1872,7632,1740,93313,459901,1358657,2504881}; main(){ /* for(int i=1;i<14;i++){ cout<<i<<endl; int m=2; while(true){ list<int> app; rep(j,i*2)app.pb(j); list<int>::iterator iter=app.begin(); bool ok=true; while(true){ int nm=(m-1)%SZ(app); rep(j,nm){ ++iter; if(iter==app.end())iter=app.begin(); } if(*iter<i){ ok=false; break; } iter=app.erase(iter); if(iter==app.end())iter=app.begin(); if(app.size()==i)break; } if(ok)break; ++m; if(m<0)break; } ans[i]=m; cout<<m<<endl; } puts("ok"); */ int k; while(cin>>k,k)cout<<ans[k]<<endl; }