#include <bits/stdc++.h>
using namespace std;
#define MOD 1000000007
long long n, d;
vector<long long> v;
long long tab[300001];
std::vector<long long> bord[300001];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
for(int i=0; i<n; i++) {
cin >> d;
v.push_back(d);
}
for(int i=0; i < v.size(); i++) {
long long tmp = 0L;
for(int j = i; j<v.size(); j++) {
tmp += (long long) v[j];
if(tmp >= MOD) {
tmp -= MOD;
}
if(tmp %2 == 0) {
bord[j+1].push_back(i);
}
}
}
tab[0]=1;
for(int i=0; i<=n; i++) {
for(int j=0; j <bord[i].size(); j++) {
tab[i] += tab[bord[i][j]];
tab[i] %= MOD;
}
}
cout << tab[n];
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 | #include <bits/stdc++.h> using namespace std; #define MOD 1000000007 long long n, d; vector<long long> v; long long tab[300001]; std::vector<long long> bord[300001]; int main() { ios::sync_with_stdio(false); cin.tie(NULL); cin >> n; for(int i=0; i<n; i++) { cin >> d; v.push_back(d); } for(int i=0; i < v.size(); i++) { long long tmp = 0L; for(int j = i; j<v.size(); j++) { tmp += (long long) v[j]; if(tmp >= MOD) { tmp -= MOD; } if(tmp %2 == 0) { bord[j+1].push_back(i); } } } tab[0]=1; for(int i=0; i<=n; i++) { for(int j=0; j <bord[i].size(); j++) { tab[i] += tab[bord[i][j]]; tab[i] %= MOD; } } cout << tab[n]; return 0; } |
English