简单异或 && 洛谷 P1469 找筷子 && 洛谷 P3908 数列之异或
异或运算
相同为0,不同为1。
1^1=0,0^1=1,1^0=1,0^0=0
P1469 找筷子
很有趣的一道题。因为空间有限制,所以我们每读入一个数就与ans异或一下,因为相同会变成0,所以剩下的即是答案。
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int n,a,ans; 5 int main(){ 6 cin>>n; 7 for(int i=1;i<=n;i++){ 8 scanf("%d",&a); 9 ans^=a; 10 } 11 cout<<ans; 12 return 0; 13 }
P3908 数列之异或
发现这样一个规律,0^1=1,2^3=1,3^4=1,所以每四个就抵消成0,所以看n+1(因为加上0)除以4的余数即可。
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 long long a; 6 int main(){ 7 cin>>a; 8 if((a+1)%4==0){ 9 cout<<0; 10 return 0; 11 } 12 if((a+1)%4==1){ 13 cout<<a; 14 return 0; 15 } 16 if((a+1)%4==2){ 17 cout<<1; 18 return 0; 19 } 20 if((a+1)%4==3){ 21 long long aaa=a^1; 22 cout<<aaa; 23 //或者直接 cout<<a+1; 24 return 0; 25 } 26 return 0; 27 }