#include <cstdio> long long tab[300000]; long long p=1000000007; long long s=0,w=0; int n,i,k,j; inline int verifyX(int variant){ s=0; for(j=0;j<n;j++){ s=(s+tab[j])%p; if(variant & (1<<j)){ if(s&1){ return 0; } s=0; } } if(s%2 != 0) return 0; return 1; } void bruteforce(){ w=0; k=1<<(n-1); for(i=0;i<k;i++){ w+=verifyX(i); } printf("%d",w%p); } int main(){ scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&tab[i]); w+=tab[i]; } if(w<p){ k=0; for(i=0;i<n;i++){ s+=tab[i]; if(s%2==0)k++; } // wynik if(s%2==1){ printf("0"); } else{ w=1; while(--k){ w=w*2; w = w % 1000000007; } printf("%d",w); } } else bruteforce(); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | #include <cstdio> long long tab[300000]; long long p=1000000007; long long s=0,w=0; int n,i,k,j; inline int verifyX(int variant){ s=0; for(j=0;j<n;j++){ s=(s+tab[j])%p; if(variant & (1<<j)){ if(s&1){ return 0; } s=0; } } if(s%2 != 0) return 0; return 1; } void bruteforce(){ w=0; k=1<<(n-1); for(i=0;i<k;i++){ w+=verifyX(i); } printf("%d",w%p); } int main(){ scanf("%d",&n); for(i=0;i<n;i++){ scanf("%d",&tab[i]); w+=tab[i]; } if(w<p){ k=0; for(i=0;i<n;i++){ s+=tab[i]; if(s%2==0)k++; } // wynik if(s%2==1){ printf("0"); } else{ w=1; while(--k){ w=w*2; w = w % 1000000007; } printf("%d",w); } } else bruteforce(); return 0; } |