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