Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
97108 | lgh | 折纸 | C++ | 通过 | 100 | 3485 MS | 252 KB | 828 | 2023-08-09 12:09:15 |
#include<bits/stdc++.h> using namespace std; typedef long long ll; const ll mod=1000000007; ll k,m,h,l,r,p[32],n,a,b,c; ll A(ll x) { ll ans=0,q=x>>1; for(int i=0; i<k; i++) ans=(ans<<1)|(q&1),q>>=1; if(x&1) ans^=p[k]; return ans; } inline ll f(ll l,ll r,ll k) { if((l&1) && (r&1)) return A(l)+(r-l>>1)*p[k]; if((l&1) && (!(r&1))) return A(l)+A(r)+(r-l>>1)*p[k]; if((!(l&1)) && (r&1)) return (r-l+1>>1)&1?p[k]:0; return ((r-l>>1)&1?p[k]:0)^A(r); } int main() { // freopen("fold.in","r",stdin); // freopen("fold.out","w",stdout); scanf("%lld%lld%lld%lld%lld%lld%lld",&k,&m,&l,&r,&a,&b,&c); n=1<<k; p[0]=0; for(int i=1; i<=31; i++) p[i]=p[i-1]*2+1; for(int i=1; i<=m; i++) { h=((l^r^h^f(l,r,k))+c)%mod; l=((l^a^h)%(n+1))%n; r=((r^b^h)%(n-l))+l; } printf("%lld\n",h); return 0; }