#include <bits/stdc++.h> using namespace std; constexpr long long MOD = 1e9 + 7; constexpr int LIM = 3e5; long long endings[LIM + 3], t[LIM + 3]; int main() { int n; scanf("%d", &n); for(int i = 0; i < n; ++i) { scanf("%lld", &t[i]); } long long ts = 0; for(int i = 0; i < n; ++i) { if(i == 0 || endings[i - 1] > 0) { ts = 0; for(int j = i; j < n; ++j) { ts = (ts + t[j]) % MOD; if(!(ts & 1)) { endings[j] = (endings[j] + (i == 0 ? 1 : endings[i - 1])) % MOD; } } } } printf("%lld", endings[n - 1]); }
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 | #include <bits/stdc++.h> using namespace std; constexpr long long MOD = 1e9 + 7; constexpr int LIM = 3e5; long long endings[LIM + 3], t[LIM + 3]; int main() { int n; scanf("%d", &n); for(int i = 0; i < n; ++i) { scanf("%lld", &t[i]); } long long ts = 0; for(int i = 0; i < n; ++i) { if(i == 0 || endings[i - 1] > 0) { ts = 0; for(int j = i; j < n; ++j) { ts = (ts + t[j]) % MOD; if(!(ts & 1)) { endings[j] = (endings[j] + (i == 0 ? 1 : endings[i - 1])) % MOD; } } } } printf("%lld", endings[n - 1]); } |