简单异或 && 洛谷 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 }
原文地址:https://www.cnblogs.com/yinyuqin/p/14021226.html