http://codeforces.com/problemset/problem/814/B
构造题烦死人,一开始我还记录一大堆信息来构造p数列,其实因为s数列只有两项相等,也正好缺了一项,那就把两种情况构造出来暴力验证对不对就行了。
#include<bits/stdc++.h> using namespace std; #define ll long long int n; int s[1005]; int us[1005]; int t[1005]; int ut[1005]; int a[1005]; int main(){ scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&s[i]); us[s[i]]++; } for(int i=0;i<n;i++){ scanf("%d",&t[i]); ut[t[i]]++; } int t1=0; for(int i=1;i<=n;i++){ if(us[i]==0){ t1=i; } } vector<int> dif; for(int i=0;i<n;i++){ a[i]=s[i]; if(us[s[i]]==2){ dif.push_back(i); //printf("i=%d\n",i); } } int tmp; for(auto i:dif){ tmp=a[i]; a[i]=t1; int cnt=0; for(int j=0;j<n;j++){ if(a[j]!=t[j]) cnt++; } if(cnt==1){ for(int j=0;j<n;j++){ printf("%d%c",a[j],(" \n"[j==n-1])); } return 0; } a[i]=tmp; } }
原文地址:https://www.cnblogs.com/Yinku/p/10327676.html
时间: 2024-10-08 18:37:45