智商题,用的算法叫构造
竟然还有这种操作
如果两个数组只有一个不同的话,把漏掉的那个输出
如果有两个的话,答案是位于对角线位置中的一个(我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; }