/* ACM 440 Eeny Meeny Moo * mythnc * 2011/12/07 08:07:57 * run time: 0.068 */ #include <stdio.h> #define MAXN 149 typedef struct list { int i; struct list *next; struct list *pre; } List; void init(List *); int findm(List *, int); void link(List *, int); int main(void) { List array[MAXN]; int n, i; int ans[MAXN]; init(array); for (i = 3; i < MAXN + 1; i++) ans[i - 1] = findm(array, i); while (scanf("%d", &n) && n != 0) printf("%d\n", ans[n - 1]); return 0; } /* init: initialize array */ void init(List *array) { int i; for (i = 0; i < MAXN; i++) array[i].i = i + 1; } /* findm: find and return the number m */ int findm(List *ary, int n) { int count, i, m; List *p; for (m = 2; ; m++) { /* find m */ link(ary, n); /* link all again */ p = ary; count = 1; while (count < n) { p->pre->next = p->next; /* link arrange */ p->next->pre = p->pre; for (i = 0; i < m; i++) /* move */ p = p->next; count++; if (p->i == 2) break; } if (count == n) return m; } } /* link: link array elements one by one * in a circle */ void link(List *p, int n) { int i; p[0].next = &p[1]; p[0].pre = &p[n - 1]; for (i = 1; i < n; i++) { p[i].next = &p[(i + 1) % n]; p[i].pre = &p[i - 1]; } }
20111207
ACM 440 Eeny Meeny Moo
同ACM151。
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言