提交时间:2022-07-19 11:52:56

运行 ID: 52324

#include<cstdio> #include<iostream> #define ll long long using namespace std; int k,n,m,a,b,c,l,r,h,mod=1e9+7; ll F; ll sum(int x) { ll res=0; int tag=x&1; for(int i=1;i<=k;i++) res=(res<<1)|((x&1)^((x>>i)&1)); return res; } ll calc() { if(l&1) { if(r&1) return sum(l)+1ll*(n-1)*((r-l)>>1); else return sum(l)+sum(r)+1ll*(n-1)*((r-l-1)>>1); } else { if(r&1) return ((r-l+1)>>1)&1 ? n-1:0; else return ((r-l)>>1)&1 ? sum(r+1):sum(r); } } int main() { scanf("%d%d%d%d%d%d%d",&k,&m,&l,&r,&a,&b,&c); n=1<<k; for(int i=1;i<=m;i++) { F=calc(); h=((l^r^h^F)+c)%mod; l=(l^a^h)%(n+1)%n; r=(r^b^h)%(n-l)+l; } printf("%d",h); return 0; } /* 30 5000000 4 5 273035200 65685838 991992535 */