#include <bits/stdc++.h>
using namespace std;
const int c=1000000007;
int n, s=0;
int M=1<<19;
int w[1<<20]={};
void insert (int x, int val)
{
int v=M+x;
w[v]=val;
while (v!=1)
{
v/=2;
w[v]=(w[2*v]+w[2*v+1])%c;
}
}
int query (int a, int b)
{
int va=M+a;
int vb=M+b;
int suma=w[va];
if (va!=vb)
suma=(suma+w[vb])%c;
while (va/2!=vb/2)
{
if (va%2==0)
suma=(suma+w[va+1])%c;
if (vb%2==1)
suma=(suma+w[vb-1])%c;
va/=2;
vb/=2;
}
return suma%c;
}
void mopadulo (int a, int dl)
{
int b=a+dl-1;
int suma=query(a, b);
if (suma%2==0)
{
if (b==n-1)
{
s=(s+1)%c;
return;
}
for (int i=1; i<=n-b-1; i++)
mopadulo(b+1, i);
}
}
int main()
{
ios_base::sync_with_stdio(0);
int a;
cin >> n;
for (int i=0; i<n; i++)
{
cin >> a;
insert(i, a);
}
for (int i=1; i<=n; i++)
mopadulo(0, i);
cout << s;
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 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #include <bits/stdc++.h> using namespace std; const int c=1000000007; int n, s=0; int M=1<<19; int w[1<<20]={}; void insert (int x, int val) { int v=M+x; w[v]=val; while (v!=1) { v/=2; w[v]=(w[2*v]+w[2*v+1])%c; } } int query (int a, int b) { int va=M+a; int vb=M+b; int suma=w[va]; if (va!=vb) suma=(suma+w[vb])%c; while (va/2!=vb/2) { if (va%2==0) suma=(suma+w[va+1])%c; if (vb%2==1) suma=(suma+w[vb-1])%c; va/=2; vb/=2; } return suma%c; } void mopadulo (int a, int dl) { int b=a+dl-1; int suma=query(a, b); if (suma%2==0) { if (b==n-1) { s=(s+1)%c; return; } for (int i=1; i<=n-b-1; i++) mopadulo(b+1, i); } } int main() { ios_base::sync_with_stdio(0); int a; cin >> n; for (int i=0; i<n; i++) { cin >> a; insert(i, a); } for (int i=1; i<=n; i++) mopadulo(0, i); cout << s; return 0; } |
English