牛客周赛 Round 150
思路前缀异或的性质区间等比缩小缩小的时候l上取整r下取整#includebits/stdc.h #define int long long #define fi first #define se second #define endl \n using namespace std; typedef pairint,int pii; const int N1e610; const int mod998244353; vectorintpm; int judge[N],nm[N],inv[N]; int Log2[N]; int kmi(int a,int b){ int res1; while(b){ if(b1) resres*a%mod; aa*a%mod; b1; } return res; } int mul(int a,int b){ int ans0; while (b) { if (b 1) ans (ans a) % mod; a (a a) % mod; b 1; } return ans; } void init(){ nm[0]inv[0]1; for(int i1;i1e6;i){ nm[i]nm[i-1]*i%mod; inv[i]kmi(nm[i],mod-2); } } void euler(int n){ judge[1]1; for(int i2;in;i){ if(!judge[i]){ pm.push_back(i); } for(int j0;pm[j]*in;j){ judge[pm[j]*i]1; if(i%pm[j]0) break; } } } int C(int a,int b){ return nm[a]*inv[a-b]%mod*inv[b]%mod; } //从1开始的异或和 void solve(){ int l,r,x;cinlrx; l(lx-1)/x; rr/x; l--; int prel,prer; if(l%40) prell; else if(l%41) prel1; else if(l%42) prell1; else if(l%43) prel0; if(r%40) prerr; else if(r%41) prer1; else if(r%42) prerr1; else if(r%43) prer0; cout(prer^prel)*x; } signed main(){ ios::sync_with_stdio(0);cin.tie(0); // for(int i2;i1e6;i){ // Log2[i]Log2[i/2]1; // } int T1;//cinT; while(T--) solve(); return 0; }