codeforces An express train to reveries 814B

xiaoxiao2021-02-28  73

题目链接:

http://codeforces.com/contest/814/problem/B

题意:

找到一串数字,它跟A,B串(互相)只有一个不同。

题解:

通过贪心的思想可以知道,如果要满足条件,那么就只会出现两种情况,要么一个不同,要么两个不同。

得到这个以后就简单很多了,直接进行暴力就行了。

代码:

#include <cmath> #include <cstdio> #include <map> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define met(a,b) memset(a,b,sizeof(a)) #define inf 0x3f3f3f3f const int maxn = 1000+10; map<int,int> mp; int num1[maxn]; int num2[maxn]; int num[maxn]; int pos[maxn]; int main() { int n; scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",&num1[i]); for(int i=0;i<n;i++) scanf("%d",&num2[i]); mp.clear(); int len=0; met(pos,0); for(int i=0;i<n;i++) { if(num1[i]!=num2[i]) pos[len++]=i; else mp[num1[i]]=1; } met(num,0); for(int i=0;i<n;i++) num[i]=num1[i]; if(len==1) { int x=pos[0]; for(int i=1;i<=n;i++) { if(mp[i]==0) { num[x]=i; break; } } } else { int x=pos[0]; int y=pos[1]; num[x]=num1[x]; num[y]=num2[y]; mp.clear(); for(int i=0;i<n;i++) { mp[num[i]]++; if(mp[num[i]]>=2) { num[x]=num2[x]; num[y]=num1[y]; break ; } } } for(int i=0;i<n;i++) { if(i!=n-1) printf("%d ",num[i]); else printf("%d\n",num[i]); } }

转载请注明原文地址: https://www.6miu.com/read-24747.html

最新回复(0)