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 }

你可能感兴趣的:(poj)