B. Equal XOR
分析:根据异或运算的特点,先取两边重复出现的数字它们的异或不影响,然后在把剩余的分别加上相同的数字即可(因为数字每个都出现两次)。
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const int N=2e5+10;
void slove(){
int n,k;
cin>>n>>k;
vector<int>a(n),b(n),a1,a2,c;
map<int,int>mp1,mp2;
for(int i=0;i<n;i++){
cin>>a[i];
mp1[a[i]]++;
if(mp1[a[i]]==2)a1.push_back(a[i]);
}
for(int i=0;i<n;i++){
cin>>b[i];
mp2[b[i]]++;
if(mp2[b[i]]==2)a2.push_back(b[i]);
}
for(int i=1;i<=n;i++){
if(mp1[i]==1)c.push_back(i);
}
if(k<=(int)a1.size()){
for(int i=0;i<k;i++){
cout<<a1[i]<<' '<<a1[i]<<' ';
}
cout<<"\n";
for(int i=0;i<k;i++){
cout<<a2[i]<<' '<<a2[i]<<' ';
}
cout<<"\n";
}else{
for(int i=0;i<(int)a1.size();i++){
cout<<a1[i]<<' '<<a1[i]<<' ';
}
k-=(int)a1.size();
for(int i=0;i<k*2;i++){
cout<<c[i]<<' ';
}
cout<<"\n";
for(int i=0;i<(int)a2.size();i++){
cout<<a2[i]<<' '<<a2[i]<<' ';
}
for(int i=0;i<k*2;i++){
cout<<c[i]<<' ';
}
cout<<"\n";
}
}
int main(){
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
int t;
cin>>t;
while(t--){
slove();
}
return 0;
}
B. Matrix Stabilization
此题为800分
分析: