1. 程式人生 > 實用技巧 >簡單異或 && 洛谷 P1469 找筷子 && 洛谷 P3908 數列之異或

簡單異或 && 洛谷 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 }