An express train to reveries
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.
题解:
题目描述有一点恶心,先讲一讲题意。
说白了就是给你两个数列a和b,要你找一个数列c,使得c与a和b都最多只有一个不同的数,这就是为什么第二组样例只能有一组解的原因。
思路就是一个一个找a和b相同的数直接放到c中,然后分别试一试两种情况就可以了。
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<queue> #include<ctime> #include<stack> #include<vector> using namespace std; int n,a[10001],b[10001],c[10001],vis[10001]; int cnt1,cnt2,cnt3,cnt4; int main() { int i,j; scanf("%d",&n); for(i=1; i<=n; i++) { scanf("%d",&a[i]); } for(i=1; i<=n; i++) { scanf("%d",&b[i]); } memset(c,-1,sizeof(c)); for(i=1; i<=n; i++) { if(a[i]==b[i]) { if(!vis[a[i]]) { c[i]=a[i]; vis[a[i]]=1; } } } for(i=1; i<=n; i++) { if(c[i]==-1) { if(!cnt1)cnt1=i; else { cnt2=i; break; } } } for(i=1; i<=n; i++) { if(!vis[i]) { if(!cnt3)cnt3=i; else { cnt4=i; break; } } } if(!cnt2)c[cnt1]=cnt3; else { int ans1=0,ans2=0; if(a[cnt1]!=cnt3)ans1++; if(b[cnt1]!=cnt3)ans1++; if(a[cnt2]!=cnt4)ans2++; if(b[cnt2]!=cnt4)ans2++; if(ans1==1&&ans2==1) { c[cnt1]=cnt3; c[cnt2]=cnt4; } else { c[cnt2]=cnt3; c[cnt1]=cnt4; } } for(i=1; i<=n; i++) cout<<c[i]<<' '; return 0; }