很多小的细节都没想到。。。
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 "); 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 "); 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 "); 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 "); 66 return 0; 67 } 68 } 69 } 70 } 71 printf("NO "); 72 return 0; 73 }