题目链接:http://codeforces.com/problemset/problem/814/B
B. An express train to reveries time limit per test 1 second memory limit per test 256 megabytes input standard input output standard outputSengoku 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.
InputThe 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.
OutputOutput 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.
Examples input 5 1 2 3 4 3 1 2 5 4 5 output 1 2 5 4 3 input 5 4 4 2 3 1 5 4 5 3 1 output 5 4 2 3 1 input 4 1 1 3 4 1 4 3 4 output 1 2 3 4 NoteIn 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两个串,求p串,要求p串分别和a,b串只有一个不相同,并且p串不能含有重复元素(必须1~n)
解析:a,b不相同个数只能为1或者2,分别处理就好,简单判断下,比赛时代码有点乱,但思路还是比较清晰,不想改了,将就下看吧,哈哈~
代码:
#include<bits/stdc++.h> #define N 2009 using namespace std; int a[N], b[N], used[N], p[N]; bool judge(int n) { int num1, num2; num1 = num2 = 0; for(int i = 1; i <= n; i++) { if(p[i] != a[i]) num1++; if(p[i] != b[i]) num2++; } if(num1 == num2&&num1 == 1) return true; return false; } int main() { int n; memset(used, 0, sizeof(used)); 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 num = 0; for(int i = 1; i <= n; i++) { if(a[i] != b[i]) num++; else used[a[i]] = 1; } if(num == 1) { for(int i = 1; i <= n; i++) { if(a[i] == b[i]) printf("%d%c", a[i], i == n ? '\n' : ' '); else { for(int j = 1; j <= n; j++) { if(used[j]) continue; printf("%d%c", j, j == n ? '\n' : ' '); break; } } } } else { stack<int> s; for(int i = 1; i <= n; i++) if(!used[i]) s.push(i); int num1 = s.top(); s.pop(); int num2 = s.top(); s.pop(); while(!s.empty()) s.pop(); for(int i = 1; i <= n; i++) { if(a[i] != b[i]) s.push(i); else p[i] = a[i]; } int ii = s.top(); s.pop(); int jj = s.top(); s.pop(); while(!s.empty()) s.pop(); p[ii] = num1; p[jj] = num2; if(judge(n)) { for(int i = 1; i <= n; i++) printf("%d%c", p[i], i == n ? '\n' : ' '); } else { p[ii] = num2; p[jj] = num1; for(int i = 1; i <= n; i++) printf("%d%c", p[i], i == n ? '\n' : ' '); } } return 0; }