codeforces 584C Marina and Vasya

来源:互联网 发布:网络用语开屏 编辑:程序博客网 时间:2024/06/07 01:29

题目链接:

http://codeforces.com/problemset/problem/584/C

题意:

给你两串字符,问你能不能找到另外一串字符,使得这个字符串和其他的两个都T个不同的字母,注意:这里的不同,仅仅指的是该位置上的字母的不同。(题意理解很重要!!!)

题解:

首先需要明确一点,那就是贪心两个共有的字母,然后在这个的基础上,再去考虑其他的情况,可以使用覆盖的方法,进行多次的覆盖。

代码:

#include <cmath>#include <map>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define met(a,b) memset(a,b,sizeof(a))#define inf 0x3f3f3f3fconst int maxn = 1e5+10;char s1[maxn],s2[maxn],s3[maxn];int n,t;int main(){    scanf("%d%d",&n,&t);    int m=n-t;    scanf("%s%s",s1,s2);    int k1=0,k2=0;    for(int i=0;i<n;i++)    {        if(s1[i]==s2[i]&&k1<m&&k2<m)        {            s3[i]=s1[i];            k1++;            k2++;        }        else if(s1[i]!=s2[i]||k1==m)        {            for(char j='a';j<='z';j++)            {                if(s1[i]!=j&&s2[i]!=j)                {                    s3[i]=j;                    break;                }            }        }    }    if(k1==m&&k2==m)    {        printf("%s\n",s3);        return 0;    }    for(int i=0;i<n;i++)    {        if(s1[i]==s2[i])            continue;        if(k1<m)        {            s3[i]=s1[i];            k1++;        }        else if(k2<m)        {            s3[i]=s2[i];            k2++;        }        else        {            for(char j='a';j<='z';j++)            {                if(s1[i]!=j&&s2[i]!=j)                {                    s3[i]=j;                    break;                }            }        }    }    if(k1<m||k2<m)        printf("-1\n");    else        printf("%s\n",s3);}
原创粉丝点击