ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021牛客多校4 C - LCS (构造)

2021-08-13 19:31:21  阅读:200  来源: 互联网

标签:LCS minn s3 s2 s1 牛客 int 2021 include


构造字符串s1,s2,s3使得LCS(s1,s2)=a,LCS(s2,s3)=b,LCS(s3,s1)=c

我们先令minn为a,b,c三者中最小的,将s1,s2,s3用字符'a'填充至minn长度

然后再依次满足a,b,c三种条件,分别用字符'b''c''d'填充a-minn,b-minn,c-minn次

此时消耗最少字符满足上述三种条件,如果此时的s1,s2,s3中有一个长度超过了n,那么三种字符串不可能被构造,输出NO

然后随便使用三种不同的字符填充s1,s2,s3剩余空位至n即可

 

 

#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;

int a,b,c,n;
int minn=0x3f3f3f3f;
char s1[10010];
char s2[10010];
char s3[10010];
int len1,len2,len3;

int main(){
    scanf("%d%d%d%d",&a,&b,&c,&n);
    minn=min(c,min(a,b));
    for(int i=1;i<=minn;i++)
    {
        s1[++len1]='a';
        s2[++len2]='a';
        s3[++len3]='a';
    }
    for(int i=1;i<=(a-minn);i++)
    {
        s1[++len1]='b';
        s2[++len2]='b';
    }
    for(int i=1;i<=(b-minn);i++)
    {
        s2[++len2]='c';
        s3[++len3]='c';
    }
    for(int i=1;i<=(c-minn);i++)
    {
        s3[++len3]='d';
        s1[++len1]='d';
    }
    while(len1<n)
    {
        s1[++len1]='x';
    }
    while(len2<n)
    {
        s2[++len2]='y'; 
    }
    while(len3<n)
    {
        s3[++len3]='z';
    }
    if(len1==n&&len2==n&&len3==n)
    {
        cout<<s1+1<<endl<<s2+1<<endl<<s3+1<<endl;
    }
    else cout<<"NO";
    return 0;
}

 

标签:LCS,minn,s3,s2,s1,牛客,int,2021,include
来源: https://www.cnblogs.com/lemonGJacky/p/15138861.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有