提交时间:2022-07-19 12:43:03

运行 ID: 52537

#include<cstdio> #include<algorithm> #include<queue> using namespace std; typedef long long ll; const ll M=1e4+10; bool used[2000]; ll k,m,l[2],r[2],a,b,c,h[2]; ll tp,n; struct data{ ll num,lst,llst; }; ll sum(ll x) { ll ret=0; for(ll i=1;i<=k;i++) ret<<=1,ret|=((x&1)^(x>>i)&1); return ret; } ll f(ll l,ll r) { ll ret=0; if(l&1) { if(r&1) ret=sum(l)+(r-l>>1)*tp; else ret=sum(l)+sum(r)+(r-l>>1)*tp; } else { if(r&1) ret=((r-l+1)>>1&1)?tp:0; else ret=((r-l)>>1&1)?sum(r+1):sum(r); } return ret; } int main() { // freopen("fold.in","r",stdin); // freopen("fold.out","w",stdout); scanf("%lld",&k); tp=(1<<k)-1,n=tp+1; scanf("%lld %lld %lld",&m,&l[0],&r[0]); scanf("%lld %lld %lld",&a,&b,&c); ll now=0; for(ll i=0;i<m;i++) { h[now^1]=((l[now]^r[now]^h[now]^f(l[now],r[now]))+c)%1000000007; l[now^1]=((l[now]^a^h[now^1])%(n+1))%n; r[now^1]=((r[now]^b^h[now^1])%(n-l[now^1]))+l[now^1]; now^=1; } printf("%lld\n",h[now]); // fclose(stdin); // fclose(stdout); return 0; }