2022 年第四届河南省 CCPC 大学生程序设计竞赛

Problem A. Mocha 上小班啦
时间限制: 1 second
空间限制: 512 megabytes
旭丘幼儿园的小班开设了一门教授数论的课程。 Mocha 在研究数论的过程中,发现了一种奇妙的
——Mocha 数。 Mocha 数是一个由几个互不相同的数字构成且不含前导零的正整数。
为了方便研究, Mocha 想知道是否存在一个包含 n 个数位的 Mocha 数,如果存在,其中最小的 Mocha
数是多少。
输入格式:
一个整数 n
1 n 20 ),代表询问的位数。
输出格式:
如果存在包含 n 个数位的 Mocha 数,输出最小的 n Mocha 数,否则输出 1
样例
输入:
1
输出:
1
提示:
1 9 都是只包含 1 个数位的 Mocha 数,其中 1 是最小的 Mocha 数。
#include

using namespace std;

int main()
{
    int n; cin >> n;
//输入
//输入最大的n的最小值1023456789
//1
//10
//102
//。。
//。。。。
//。。。。。。

    if (n >= 1 && n <= 10)
        cout << 1;
//大于1输出1

    if (n >= 2 && n <= 10)
        cout << 0;
//大于2输出0

    if (n <= 10)
    {
        for (int a = 2; a < n; a++)
            cout << a;
    }
//将其余数字输出

    else
        cout << -1;
//输出-1结束

    return 0;
}

Problem E. Serval 的俳句
时间限制: 1 second
空间限制: 512 megabytes
Serval 是加帕里幼儿园的新生。
Serval 在俳句赏析大会上发现了一本神秘书卷,他想从中找出一句俳句。
具体来说,神秘书卷是一个仅包含小写英文字母的字符串 S ,你需要找到满足下列条件的 S 子序列 S 作为一句俳句:
2022 年第四届河南省 CCPC 大学生程序设计竞赛_第1张图片

如果不存在满足条件的子序列,则输出 none
我们称 S S 的子序列,当且仅当 S 可以从 S 中删去任意数量的字符得到。注意 S 的前 5 个字符、中间 7 个字符以及后 5 个字符可以为同一个字符,例如 aaaaaaaaaaaaaaaaa, bbbbbcccccccbbbbb ,dddddeeeeeeeeeeee 都是满足条件的。
输入格式
第一行,一个正整数 | S | (1 ≤ | S | ≤ 10 6 ),表示字符串 S 的长度。
第二行,一个长度为 | S | 的仅包含小写字母的字符串 S
输出格式
共一行,如果满足条件的子序列存在,则输出这个子序列,否则输出 none
样例1
输入:
11
lifeispiano
输出:
none
样例2
输入:
22
aaabaacccdccbcccaadaaa
输出:
aaaaacccccccaaaaa
代码献上:
#include 

using namespace std;

#define int long long
//不开ll见祖宗

int cnt[26];
//用于储存字符

signed main()
{
    int n;
    string s;
    cin >> n >> s;

    string res = "";
//初始化

    int ok = 0;
    for (int i = 0; i < n; i++)
//一遍直接最优解
    {

        cnt[s[i] - 'a']++;
//字符转化为整数进行次数储存

        if (cnt[s[i] - 'a'] == 5 and ok == 0)
//判断当前字符是否达到5次
        {
            ok = 1;
//第一次标记
            res += string(5, s[i]);
//将第一次到达5次的字符储存到res
            for (int j = 0; j < 26; j++)
                cnt[j] =0;
//将字符个数重置
        }
        else if (cnt[s[i] - 'a'] == 7 and ok == 1)
//判断当前字符是否达到7次
        {
            ok = 2;
//第2次标记
            res += string(7, s[i]);
//将第2次到达5次的字符储存到res
            for (int j = 0; j < 26; j++)
                cnt[j] = 0;
//将字符个数重置
        }
        else if (cnt[s[i] - 'a'] == 5 and ok == 2)
        {
            ok = 3;
            res += string(5, s[i]);
            break;
        }
//同理上两步
    }
    if (ok == 3)
        cout << res << endl;
//判断输出
    else
        cout << "none" << endl;   
//输出"none"
    return 0;
}

你可能感兴趣的:(开发语言,c++,蓝桥杯,算法,数据结构)