Sengoku still remembers the mysterious "colourful meteoroids" she discovered with Lala-chan when they were little. In particular, one of the nights impressed her deeply, giving her the illusion that all her fancies would be realized.
On that night, Sengoku constructed a permutation p1, p2, ..., pn of integers from 1 to n inclusive, with each integer representing a colour, wishing for the colours to see in the coming meteor outburst. Two incredible outbursts then arrived, each with n meteorids, colours of which being integer sequences a1, a2, ..., an and b1, b2, ..., bn respectively. Meteoroids' colours were also between 1 and ninclusive, and the two sequences were not identical, that is, at least one i (1 ≤ i ≤ n) exists, such that ai ≠ bi holds.
Well, she almost had it all — each of the sequences a and b matched exactly n - 1 elements in Sengoku's permutation. In other words, there is exactly one i (1 ≤ i ≤ n) such that ai ≠ pi, and exactly one j (1 ≤ j ≤ n) such that bj ≠ pj.
For now, Sengoku is able to recover the actual colour sequences a and b through astronomical records, but her wishes have been long forgotten. You are to reconstruct any possible permutation Sengoku could have had on that night.
The first line of input contains a positive integer n (2 ≤ n ≤ 1 000) — the length of Sengoku's permutation, being the length of both meteor outbursts at the same time.
The second line contains n space-separated integers a1, a2, ..., an (1 ≤ ai ≤ n) — the sequence of colours in the first meteor outburst.
The third line contains n space-separated integers b1, b2, ..., bn (1 ≤ bi ≤ n) — the sequence of colours in the second meteor outburst. At least one i (1 ≤ i ≤ n) exists, such that ai ≠ bi holds.
Output n space-separated integers p1, p2, ..., pn, denoting a possible permutation Sengoku could have had. If there are more than one possible answer, output any one of them.
Input guarantees that such permutation exists.
5 1 2 3 4 3 1 2 5 4 5
1 2 5 4 3
5 4 4 2 3 1 5 4 5 3 1
5 4 2 3 1
4 1 1 3 4 1 4 3 4
1 2 3 4
In the first sample, both 1, 2, 5, 4, 3 and 1, 2, 3, 4, 5 are acceptable outputs.
In the second sample, 5, 4, 2, 3, 1 is the only permutation to satisfy the constraints.
题解:
因为必定有解
只会有一个或两个位置不同
如果一个位置不同 留一个合法的不变 改另一个不合法的 使序列变成两位置不同
如果两位置不同 那么c一个不同的位置取a,另一个取b就得到了c
代码:
#include<cstdio>
using namespace std;
const int maxn=1010;
int a[maxn],b[maxn],c[maxn],vis[maxn];
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
for(int i=1;i<=n;i++)
scanf("%d",&b[i]);
int p=0,q=0;
for(int i=1;i<=n;i++)
if(a[i]!=b[i]){
if(!p)
p=i;
else q=i;
}
for(int i=1;i<=n;i++)
c[i]=a[i];
if(!q){
for(int i=1;i<=n;i++)
vis[a[i]]=1;
for(int i=1;i<=n;i++)
if(!vis[i])
c[p]=i;
}
else{
for(int i=1;i<=n;i++)
if(i!=p&&i!=q)
vis[a[i]]=1;
for(int i=1;i<=n;i++)
if(i!=p&&i!=q)
vis[b[i]]=1;
if(!vis[a[p]]&&vis[b[p]])
c[p]=a[p],vis[c[p]]=1;
if(!vis[a[q]]&&vis[b[q]])
c[q]=a[q],vis[c[q]]=1;
if(vis[a[q]]&&!vis[b[q]])
c[q]=b[q],vis[c[q]]=1;
if(vis[a[p]]&&!vis[b[p]])
c[p]=b[p],vis[c[p]]=1;
if(a[p]==a[q]&&b[p]==b[q])
c[q]=b[q];
}
for(int i=1;i<=n;i++)
printf("%d ",c[i]);
return 0;
}
解决一个数学问题,通过已知两次流星雨的颜色序列,找到一个原始排列,使得这两个序列各自与原始排列仅在一个位置上不同。
597

被折叠的 条评论
为什么被折叠?



