POJ 1012
这个是约瑟夫环的变形,它要求先除去的必须是K个以后的人。
因为k<14,可以直接暴力。
View Code
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int f[20]; 5 int res[20]; 6 7 int get_f(int y, int x, int m) 8 { 9 if (x == y)return (m-1)%x; 10 return (get_f(y-1,x,m) + m)%y; 11 } 12 13 void prepare() 14 { 15 int ind(0); 16 for (int i(1); i<14; ++i) { 17 bool flag = true; 18 int cnt(1); 19 while (flag) { 20 flag = false; 21 for (int j(1); j<=i; ++j) { 22 int num = get_f(2*i,2*i-j+1,cnt) + 1; 23 //cout<<cnt<<" "<<num<<" "<<i<<endl; 24 if (num <= i) { 25 flag = true; 26 ++cnt; 27 break; 28 } 29 //system("pause"); 30 } 31 } 32 res[++ind] = cnt; 33 } 34 } 35 36 int main() 37 { 38 int k; 39 prepare(); 40 while (scanf("%d",&k) && k) { 41 cout<<res[k]<<endl; 42 } 43 return 0; 44 }