#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod = 1e9+7;
int n;
ll a[300001];
ll dp[300001];
void brut()
{
dp[0]=1;
for(int i=1; i<=n; ++i)
{
int s = 0;
for(int j=i-1; j>=0; --j)
{
s += a[j];
s %= mod;
//printf("%d ", s);
if(s % 2 == 0)
dp[i] += dp[j];
dp[i] %= mod;
}
//printf("%d\n", dp[i]);
}
printf("%lld\n", dp[n]);
}
void mal()
{
ll sp[2] = {1, 0};
ll ob_dp = 0;
int it = 0;
for(int i=0; i^n; ++i)
{
ob_dp = 0;
if(a[i] % 2 == 1)
{
it ^= 1;
if(it == 0)
{
ob_dp = sp[it];
sp[it] += ob_dp;
sp[it] %= mod;
}
}
else
{
if(it == 0)
{
ob_dp = sp[it];
sp[it] += ob_dp;
sp[it] %= mod;
}
}
}
printf("%lld\n", ob_dp);
}
int main()
{
scanf("%d", &n);
for(int i=0; i^n; ++i)
{
scanf("%lld", &a[i]);
}
if(n <= 3000)
{
brut();
}
else
{
mal();
}
}
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 | #include <bits/stdc++.h> using namespace std; typedef long long ll; const ll mod = 1e9+7; int n; ll a[300001]; ll dp[300001]; void brut() { dp[0]=1; for(int i=1; i<=n; ++i) { int s = 0; for(int j=i-1; j>=0; --j) { s += a[j]; s %= mod; //printf("%d ", s); if(s % 2 == 0) dp[i] += dp[j]; dp[i] %= mod; } //printf("%d\n", dp[i]); } printf("%lld\n", dp[n]); } void mal() { ll sp[2] = {1, 0}; ll ob_dp = 0; int it = 0; for(int i=0; i^n; ++i) { ob_dp = 0; if(a[i] % 2 == 1) { it ^= 1; if(it == 0) { ob_dp = sp[it]; sp[it] += ob_dp; sp[it] %= mod; } } else { if(it == 0) { ob_dp = sp[it]; sp[it] += ob_dp; sp[it] %= mod; } } } printf("%lld\n", ob_dp); } int main() { scanf("%d", &n); for(int i=0; i^n; ++i) { scanf("%lld", &a[i]); } if(n <= 3000) { brut(); } else { mal(); } } |
English