simulation,但規則有點看不懂,看了中譯才搞清楚...
CODE
#include <iostream>
#include <vector>
using namespace std;
int n, k;
int kill(int i, vector<int> v);
int main(){
int i, t;
vector<int> r;
while( (cin >> n >> k) && (n != 0) ){
r.clear();
for(i=1; i<=n; ++i)
r.push_back(i);
t = kill(0, r) - 1;
t = (n - t) % n;
cout << t + 1 << endl;
}//while
return 0;
}
int kill(int i, vector<int> v){
int p;
--i;
while( v.size() > 1 ){
i = p = (i+k) % v.size(); //p: killed
v.erase(v.begin()+i);
i = (i+k-1) % v.size(); //i: burier
v.insert(v.begin()+p, v[i]);
if( i >= p )
++i;
v.erase(v.begin()+i);
if( i >= p )
i = p % v.size();
else
i = (p - 1) % v.size();
}
return v[0];
}
No comments:
Post a Comment