#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; } |
English