Submission #1035516

#TimeUsernameProblemLanguageResultExecution timeMemory
1035516alexander707070Intergalactic ship (IZhO19_xorsum)C++14
0 / 100
2023 ms7412 KiB
#include<bits/stdc++.h> #define MAXN 1007 using namespace std; struct query{ int type,val; }; const int maxa=128; const long long mod=1e9+7; int n,d[MAXN],q,l[MAXN],r[MAXN],x[MAXN]; vector<int> qs[MAXN]; int dp[500][150][150]; long long power[100007]; long long cnt[MAXN][MAXN],ans; vector<query> w; int li[207][3],tim; long long rest; void calcdp(){ dp[0][0][0]=1; for(int pos=1;pos<=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]) and li[x[i]][0]!=tim){ 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]) and li[x[i]][1]!=tim){ 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]) and li[x[i]][2]!=tim){ 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[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; }

Compilation message (stderr)

xorsum.cpp: In function 'void calcdp()':
xorsum.cpp:27:22: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<query>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   27 |     for(int pos=1;pos<=w.size();pos++){
      |                   ~~~^~~~~~~~~~
#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...