提交时间:2022-07-19 12:31:37

运行 ID: 52521

#include <bits/stdc++.h> using namespace std; const int M=1e6+6,mod=1e9+7; int n,m,aa,bb,cc,k,a[M],l,r,h; int f(int q,int w) { int ans=0; if(q&1) { ans=a[q+1]+(n-1)*((w-q)/2); if(w%2==0)ans+=a[w+1]; } else{ ans=(((w-q+1)/2)%2)?n-1:0; if(w%2==0)ans^=a[w+1]; } return ans; } int main() { ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); cin>>k>>m>>l>>r>>aa>>bb>>cc; n=1<<k; a[1]=0; for(int i=1;i<=k;i++) { for(int o=1;o<=(1<<(i-1));o++) a[o]=a[(1<<i)-o+1]=a[o]<<1; for(int o=1;o<=(1<<i);o++) if((o&1)==0) a[o]++; } while(m--) { h=((l^r^h^f(l,r))+cc)%mod; l=((l^aa^h)%(n+1))%n; r=((r^bb^h)%(n-l))+l; } cout<<h<<endl; return 0; }