Codeforce -An express train to reveries

智商题,用的算法叫构造

竟然还有这种操作

如果两个数组只有一个不同的话,把漏掉的那个输出

如果有两个的话,答案是位于对角线位置中的一个(我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;
}

  

原文地址:https://www.cnblogs.com/lintanxi/p/6970429.html