#include <bits/stdc++.h>
using namespace std;
#define st first
#define nd second
#define int long long
int p=1000000007;
main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin>>n;
vector<int> v;
v.push_back(0);
for(int i=0; i<n; i++)
{
int x;
cin>>x;
v.push_back(x);
}
vector<pair<int,int> > prz;
for(int i=1; i<=n; i++)
{
int sum=0;
for(int j=i; j<=n; j++)
{
sum=(sum+v[j])%p;
if(sum%2==0)
prz.push_back({i-1,j});
}
}
vector<int> wej(n+2, 0);
vector<int> wyj(n+2, 0);
wyj[0]=INT_MAX;
wej[n]=INT_MAX;
for(int i=0; i<prz.size(); i++)
{
wej[prz[i].st]++;
wyj[prz[i].nd]++;
}
vector<pair<int,int> > prz2;
for(int i=(int)prz.size()-1; i>=0; i--)
{
if(wyj[prz[i].st]==0 || wej[prz[i].nd]==0)
{
wej[prz[i].st]--;
wyj[prz[i].nd]--;
}
else
prz2.push_back(prz[i]);
}
// for(int i=0; i<prz2.size(); i++){
// cout<<prz2[i].st<<" "<<prz2[i].nd<<" ";
// int sum=0;
// for(int j=prz2[i].st+1; j<=prz2[i].nd; j++)
// sum+=v[j];
// cout<<sum%p<<endl;
// }
vector<int> sposoby(n+1, 0);
sposoby[0]=1;
for(int i=(int)prz2.size()-1; i>=0; i--)
{
sposoby[prz2[i].nd]=(sposoby[prz2[i].nd]+sposoby[prz2[i].st])%p;
}
cout<<sposoby[n];
}
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 | #include <bits/stdc++.h> using namespace std; #define st first #define nd second #define int long long int p=1000000007; main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin>>n; vector<int> v; v.push_back(0); for(int i=0; i<n; i++) { int x; cin>>x; v.push_back(x); } vector<pair<int,int> > prz; for(int i=1; i<=n; i++) { int sum=0; for(int j=i; j<=n; j++) { sum=(sum+v[j])%p; if(sum%2==0) prz.push_back({i-1,j}); } } vector<int> wej(n+2, 0); vector<int> wyj(n+2, 0); wyj[0]=INT_MAX; wej[n]=INT_MAX; for(int i=0; i<prz.size(); i++) { wej[prz[i].st]++; wyj[prz[i].nd]++; } vector<pair<int,int> > prz2; for(int i=(int)prz.size()-1; i>=0; i--) { if(wyj[prz[i].st]==0 || wej[prz[i].nd]==0) { wej[prz[i].st]--; wyj[prz[i].nd]--; } else prz2.push_back(prz[i]); } // for(int i=0; i<prz2.size(); i++){ // cout<<prz2[i].st<<" "<<prz2[i].nd<<" "; // int sum=0; // for(int j=prz2[i].st+1; j<=prz2[i].nd; j++) // sum+=v[j]; // cout<<sum%p<<endl; // } vector<int> sposoby(n+1, 0); sposoby[0]=1; for(int i=(int)prz2.size()-1; i>=0; i--) { sposoby[prz2[i].nd]=(sposoby[prz2[i].nd]+sposoby[prz2[i].st])%p; } cout<<sposoby[n]; } |
English