CF 71C. Round Table Knights

题目链接

很多小的细节都没想到。。。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <iostream>
 4 #include <vector>
 5 using namespace std;
 6 int p[100001];
 7 int o[100001];
 8 int main()
 9 {
10     int n,i,flag = 1,j;
11     scanf("%d",&n);
12     for(i = 0;i < n;i ++)
13     {
14         scanf("%d",&p[i]);
15         if(p[i] == 0)
16         flag = 0;
17     }
18     if(flag)
19     {
20         printf("YES\n");
21         return 0;
22     }
23     if(n%2 == 0&&n > 4)
24     {
25         memset(o,0,sizeof(o));
26         for(i = 0;i < n;i ++)
27         {
28             o[i%2] += p[i];
29         }
30         if(o[0] == n/2||o[1] == n/2)
31         {
32             printf("YES\n");
33             return 0;
34         }
35     }
36     for(i = 3;i*i <= n;i ++)
37     {
38         if(n%i == 0)
39         {
40             int mod;
41             memset(o,0,sizeof(o));
42             mod = n/i;
43             for(j = 0;j < n;j ++)
44             {
45                 o[j%mod] += p[j];
46             }
47             for(j = 0;j < mod;j ++)
48             {
49                 if(o[j] == i)
50                 {
51                     printf("YES\n");
52                     return 0;
53                 }
54             }
55             memset(o,0,sizeof(o));
56             mod = i;
57             for(j = 0;j < n;j ++)
58             {
59                 o[j%mod] += p[j];
60             }
61             for(j = 0;j < mod;j ++)
62             {
63                 if(o[j] == n/i)
64                 {
65                     printf("YES\n");
66                     return 0;
67                 }
68             }
69         }
70     }
71     printf("NO\n");
72     return 0;
73 }

 

posted @ 2013-11-01 10:42  Naix_x  阅读(170)  评论(0编辑  收藏  举报