提交时间:2022-07-19 12:11:55

运行 ID: 52441

#include <bits/stdc++.h> using namespace std; int k,m,n,l[1500],r[1500],h[1500],a[1500],p,t,b,c,mod=1000000007,x; int f(int l,int r) { int tot,ans,tmp[1500]; if(l%2==0) { for(int i=l; i<=r; i+=2) tmp[i]=a[i]+a[i+1]; ans=tmp[l]; for(int i=l+2; i<= r; i++) ans^=tmp[i]; return ans; } else { for(int i=l+1; i<=r; i+=2) tmp[i]=a[i]^a[i+1]; ans=a[l]; for(int i=l; i<=r; i++) ans+=tmp[i]; return ans; } } int main() { cin>>k>>m>>l[0]>>r[0]>>x>>b>>c; n=pow(2,k); p=t=pow(2,k-1); for(int i=0; i<n; i+=2) { a[i]=p-t; a[i+1]=p+t-1; t--; } for(int i=1; i<=m; i++) { h[i]=((l[i-1]^r[i-1]^f(l[i-1],r[i-1]))+c)%mod; l[i]=((l[i-1]^x^h[i])%(n+1))%n; r[i]=((r[i-1]^b^h[i])%(n-l[i]))+l[i]; } cout<<h[m]; }