提交时间:2024-01-03 13:46:02

运行 ID: 119040

#include<bits/stdc++.h> using namespace std; typedef unsigned long long ull; const ull DVS = 1e9 + 7; ull K, M, H, L, R, A, B, C,N, mns1; ull funcA(ull x) { ull ans(0), p(x >> 1); for(ull i(0); i != K; ++i) ans = (ans << 1) | (p & 1), p >>= 1; if(x & 1)ans ^= mns1; return ans; } inline ull funcF(ull l, ull r) { if(l & 1){ if(r & 1) return funcA(l) + ((r - l) >> 1) * mns1; return funcA(l) + funcA(r) + ((r - l) >> 1) * mns1; } if(r & 1) return (r - l + 1) & 2 ? mns1 : 0; return ((r - l) & 2 ? mns1 : 0) ^ funcA(r); } int main() { cin >> K >> M >> L >> R >> A >> B >> C; N = (1ULL << K); mns1 = N - 1; while(M--){ H = ((L ^ R ^ H ^ funcF(L, R)) % DVS + C) % DVS; L = ((L ^ A ^ H) % (N + 1)) % N; R = ((R ^ B ^ H) % (N - L)) + L; } cout<<H; return 0; }