- 异或应用
三种方法解决
- 2024-12-18 13:40:46 @
//异或应用三种解决方式 by Lancas
#include<bits/stdc++.h>
using namespace std;
//三种办法解决 加减 数组 及异或
//法1 加减
//#include<bits/stdc++.h>
//using namespace std;
int a1,x1=0;
signed main(){
for(int i=0;i<1001;i++){
cin>>a1;
x1+=a1;
}
cout<<x1-500500;//500500是一加到1000 而x1是1加到1000再加那个重复的数,所以直接 x1-500500
return 0;
}
//法2 数组
#include<bits/stdc++.h>
using namespace std;
int b2[1002],c2[1004]={0};
signed main(){
for(int i=0;i<=1000;i++){
cin>>b2[i];
if(c2[b2[i]]==0){//这个很简单 不会的话重开一维数组吧
c2[b2[i]]=1;
}
else{
cout<<b2[i];
break;
}
}
//法3 异或
#include<bits/stdc++.h>
using namespace std;
int a3[2001],x3=0;
signed main(){
for(int i=1001;i<2001;i++){
a3[i]=i-1000;//因为异或筛出来的是奇数次的 而出现两次是偶数 所以我们让他变为出现三次,就要再加一次1 to 1000 .
}
for(int i=0;i<1001;i++){
cin>>a3[i];
}
for(int i=0;i<2001;i++){
x3^=a3[i];
}
cout<<x3;
return 0;
}
//法3.5 改进之后的异或代码
//思路由[AAA勾石代码批发溜溜(茶叶同行)提供](http://222.203.110.13/d/ybtqm/user/197)
int s,s1;
int m;
int main(){
for(int i=1;i<=1000;i++){
cin>>s;
m=m^s^i;
}
cin>>s;
m^=s;
cout<<m;
}
//此方法避免使用数组
//完结撒花
//制作不易 给个点赞吧
1 comments
-
h_h LV 5 MOD @ 2024-12-19 14:31:35
👍👍👍值得分享。法三不必用数组存
- 1
Information
- ID
- 1151
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 9
- Tags
- (None)
- # Submissions
- 286
- Accepted
- 28
- Uploaded By