智商题,用的算法叫构造
竟然还有这种操作
如果两个数组只有一个不同的话,把漏掉的那个输出
如果有两个的话,答案是位于对角线位置中的一个(我tm好机智
然后呢,没有然后了
# include <cstdio>
# include <iostream>
# include <algorithm>
# include <cstring>
using namespace std;
const int maxn=1e3+5;
int a[maxn],b[maxn],c[maxn];
int n;
int mark1,mark2;
int mark[maxn];
int main(){
while(scanf("%d",&n)!=EOF){
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++) scanf("%d",&b[i]);
int err=0;
memset(mark,0,sizeof(mark));
mark1=0,mark2=0;
for(int i=1;i<=n;i++){
if(a[i]==b[i]) {
c[i]=a[i];
mark[a[i]]=1;
}
else {
err++;
if(mark1==0) mark1=i;
else mark2=i;
}
}
int k=0,kk=0;
for(int i=1;i<=n;i++){
if(!mark[i]){
if(k==0) k=i;
else kk=i;
}
}
if(err==1) c[mark1]=k;
else {
if(!mark[a[mark1]]&&!mark[b[mark2]]) c[mark1]=a[mark1],c[mark2]=b[mark2];
else c[mark1]=b[mark1],c[mark2]=a[mark2];
}
for(int i=1;i<n;i++)
printf("%d ",c[i]);
printf("%d
",c[n]);
}
return 0;
}