Submission #1035555

#TimeUsernameProblemLanguageResultExecution timeMemory
1035555alexander707070Intergalactic ship (IZhO19_xorsum)C++14
8 / 100
2087 ms47700 KiB
#include<bits/stdc++.h> #define MAXN 100007 using namespace std; struct query{ int type,val; }; const int maxa=32; const long long mod=1e9+7; int n,d[MAXN],q,l[MAXN],r[MAXN],x[MAXN]; long long dp[500][150][150]; long long power[100007]; long long cnt[1007][1007],ans; vector<query> w; int li[207][3],tim,rest; void calcdp(){ dp[0][0][0]=1; for(int pos=1;pos<=int(w.size());pos++){ for(int s=0;s<maxa;s++){ for(int t=0;t<maxa;t++){ dp[pos][s][t]=dp[pos-1][s][t]; if(w[pos-1].type==0){ dp[pos][s][t]+=dp[pos-1][s^w[pos-1].val][t]; } if(w[pos-1].type==1){ dp[pos][s][t]+=dp[pos-1][s][t^w[pos-1].val]; } if(w[pos-1].type==2){ dp[pos][s][t]+=dp[pos-1][s^w[pos-1].val][t^w[pos-1].val]; } dp[pos][s][t]%=mod; } } } } bool in(int a,int l,int r){ return a>=l and a<=r; } long long calc(int a,int b){ long long res=0; rest=0; tim++; w.clear(); for(int i=1;i<=q;i++){ if(!in(a,l[i],r[i]) and !in(b,l[i],r[i]))rest++; if(in(a,l[i],r[i]) and !in(b,l[i],r[i])){ w.push_back({0,x[i]}); li[x[i]][0]=tim; } if(!in(a,l[i],r[i]) and in(b,l[i],r[i])){ w.push_back({1,x[i]}); li[x[i]][1]=tim; } if(in(a,l[i],r[i]) and in(b,l[i],r[i])){ w.push_back({2,x[i]}); li[x[i]][2]=tim; } } calcdp(); for(long long s=0;s<maxa;s++){ for(long long t=0;t<maxa;t++){ res+=((s*t*cnt[a][b])%mod) * ((dp[int(w.size())][d[a]^s][d[b]^t]*power[rest])%mod); res%=mod; } } return res; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>n; for(int i=1;i<=n;i++){ cin>>d[i]; } for(int i=1;i<=n;i++){ for(int f=i;f<=n;f++){ cnt[i][f]=i*(n-f+1); if(i!=f)cnt[i][f]*=2; } } cin>>q; for(int i=1;i<=q;i++){ cin>>l[i]>>r[i]>>x[i]; } power[0]=1; for(int i=1;i<=q;i++){ power[i]=(power[i-1]*2)%mod; } for(int i=1;i<=n;i++){ for(int f=i;f<=n;f++){ ans+=calc(i,f); ans%=mod; } } cout<<ans<<"\n"; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...