“科大讯飞杯”第18届上海大学程序设计联赛春季赛暨高校网络友谊赛(C~D)

Posted blogxsc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了“科大讯飞杯”第18届上海大学程序设计联赛春季赛暨高校网络友谊赛(C~D)相关的知识,希望对你有一定的参考价值。

C 最长非公共子序列

题意:这一题可能咋一看比较难懂它在讲什么,大概讲的是,两个序列,求它们最长非公共子序列。那么什么是“非公共”呢?题目是这样解释的:

  • c 是 s1? 的子序列但不是 s2? 的子序列;
  • c 是 s2? 的子序列但不是 s1? 的子序列。

题解:仔细看一下这样只有两种情况:一种是两个序列相等,这样就不存在了;另一种是两个序列不相等,这样我们只需要输出两种之中最长的长度就可以了。

代码:

#include<iostream>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
int main(){
    string s1,s2;
    cin>>s1>>s2;
    if(s1==s2){
        cout<<-1<<endl;
    }else{
        cout<<max(s1.length(),s2.length())<<endl;
    }
    return 0;
}

D 最大字符集

题意:这一题的题意也比较简单,就是让你输出最大长度的为n的字符串且满足一下条件:

  • 每个字符串由 0 和 1 组成。
  • 每个字符串长度在 1 到 n 之间,且两两长度不同。
  • 集合中任何一个字符串都不是其他字符串的子串。

求满足以上条件的最大集合。

题解:这一题是一个构造,有点像cf中的a,b题的味道,你只要特判n=1和n=2两种情况,其余的按照第一个和末尾的一个是1,中间的是0输出即可。

代码:

#include<iostream>
#include<cstring>
using namespace std;
int main(){
    int n;
    cin>>n;
    if(n==1){
        cout<<1<<endl;
        cout<<1<<endl;
    }else if(n==2){
        cout<<2<<endl;
        cout<<0<<endl;
        cout<<11<<endl;
    }else{//最大长度至少为 3
        int len=2;
        cout<<n-1<<endl;
        for(int j=0;j<n-1;j++){
            for(int r=0;r<len;r++){
                if(r==0||r==len-1){
                    cout<<0;
                }else{
                    cout<<1;
                }
            }
            cout<<endl;
            len++;
        }
    }
    return 0;
}

 

以上是关于“科大讯飞杯”第18届上海大学程序设计联赛春季赛暨高校网络友谊赛(C~D)的主要内容,如果未能解决你的问题,请参考以下文章

“科大讯飞杯”第18届上海大学程序设计联赛春季赛暨高校网络友谊赛

“科大讯飞杯”第18届上海大学程序设计联赛春季赛暨高校网络友谊赛

“科大讯飞杯”第18届上海大学程序设计联赛春季赛暨高校网络友谊赛(C~D)

“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛 I.丢史蒂芬妮

“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛 A

“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛 H