codeforces An express train to reveries 814B

来源:互联网 发布:php正则表达式 编辑:程序博客网 时间:2024/05/29 05:07

题目链接:

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 0x3f3f3f3fconst 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]);    }}