atcoder第二次AK,開心。過段時間穩定點開始AGC。
AB讀明白題就行,C簡單拍個序。
D題
題意:計算A,A+1,…… ,B這些數的異或結果。
思路:記f(a,b)爲[a,b]內所有數的異或結果,則a>=1時f(a,b)=f(1,a-1)^f(1,b)。
只要計算出1,2,……,n這些數的異或結果即可,記爲g(n)
當一個數爲偶數,則這個數於比他大1的數異或值爲1.
則 當n爲奇數時,和前一個偶數異或爲1,之前的兩兩組合,計算最後的組合數及最開始的1總共的個數,得到結果1或0
當n爲偶數,n-1與n-2組合,往前以此類推,得到g(n-1)結果0或1,再異或n。
#include<iostream> #include<algorithm> using namespace std; long long xor1_a(long long a) { if(a%4==1) return (long long)1; else if(a%4==2) return a+1; else if(a%4==3 ||a==0) return (long long)0; else return a; } int main() { long long n,m; cin>>n>>m; if(n==0) cout<<(xor1_a(m))<<endl; else cout<<((xor1_a(n-1))^(xor1_a(m)))<<endl; }