CodeForce 814B

CodeForce 814B

题意:给长度为n的两个序列a,b,找出一个序列c使得序列c分别与a,b序列相差一个数

长度为n的序列包含1-n的每一个数     输出序列c满足条件的一种序列。

题解:序列a,b只存在两种可能  1有一个数不同    2有两个数不同

首先输入a,b数组,比较a b数组在每个位置上的数是否相同,相同则放入数组d,并用vis数组做标记此数已经访问

                           不相同则将该位置记录在向量q中

向量q则记录量数组在哪一个(两个)位置上不同

若有2个数不同,访问vis数组,如果vis[i]=0说明i在c数组中没有出现,将i放入向量中

此时向量q前两个数是数组a,b不相同的位置(数组c没有值得位置),后两个数是数组c中没有出现的数

有2中可能0和2,1和3      0和3,1和2根据已知条件判断为哪种情况

#include<iostream> 
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
int a[1005],b[1005],c[1005],n;
int vis[1005];

int main()
{
    int n;
    while(cin>>n)
    {
        vector<int>q;
        memset(vis,0,sizeof(vis));
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
        }
        int ans=0;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&b[i]);
            if(a[i]==b[i])
            {
                vis[a[i]]=1;//将两数组相同时的数做标记 
                c[i]=b[i];//并赋值给c数组 
            }
            else
            {
                q.push_back(i);//将不相同的位置记录下来 
                ans++;//记录有几个数不同 
            }
        }
        if(ans==1)//只有一个数不同 
        {
            for(int i=1;i<=n;i++)
            {
                if(!vis[i])//i不存在 
                    c[q[0]]=i; //第q[0]个位置的数为i 
            }
        }
        else
        {
            int res1=0,res2=0;
            for(int i=1;i<=n;i++)
            { 
                if(!vis[i])//查看那两个数在c数组中没有出现 
                {
                    q.push_back(i);    
                }    
            }    
            c[q[0]]=q[2],c[q[1]]=q[3];
            for(int i=1;i<=n;i++)//判断0和2 1和3这种情况是否成立 
            {
                if(a[i]!=c[i])
                    res1++;
                if(b[i]!=c[i])
                    res2++;
            }
            if(res1==res2&&res1==1);//成立 
            else                    //重新赋值 
                c[q[0]]=q[3],c[q[1]]=q[2];
        }
        for(int i=1;i<=n;i++)
            printf("%d ",c[i]);
        printf("
");
    }
    return 0;
}
原文地址:https://www.cnblogs.com/renwjing/p/7464322.html