提交时间:2022-07-19 13:24:59

运行 ID: 52579

#include<iostream> #include<cstdio> #define mod 1000000007 #define ll long long using namespace std; int k,m; ll a,b,c; ll n; ll get_num(int x){ int now=0,c=(x&1); for(int i=0;i<k;i+=1){ now|=((c^((x>>(k-i)&1)))<<i); } return now; } ll query(ll l,ll r){ if(l==r) return get_num(l); ll res=0; if(l&1){ res=get_num(l); res+=(r-l>>1)*(n-1); if((r&1)^1) res+=get_num(r); } else{ if((r-l+1>>1)&1) res=n-1; if((r&1)^1) res=(res^get_num(r)); } return res; } int main(){ ll l,r,ans=0; scanf("%d",&k); n=(1<<k); scanf("%d%lld%lld",&m,&l,&r); scanf("%lld%lld%lld",&a,&b,&c); for(int i=1;i<=m;i+=1){ ans=((ans^l^r^query(l,r))+c)%mod; l=(l^a^ans)%(n+1)%n; r=(r^b^ans)%(n-l)+l; } printf("%lld\n",ans); return 0; }