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