Codeforces Round 921 (Div. 2) C. Did We Get Everything Covered? (思维题)

题目链接

思路:

        div.2的A题是本题的铺垫, A题的意思是将前k个字母循环出现m次即可, 则将前k个字母看成一个循环节。

        本题则是在长为m的字符串中找循环节,注意循环节的意思是前k个字母出现至少一次, 则可知当找到一个循环节的时候,这个循环节的最后一个字母一定是第一次出现且只出现一次。若能找到大于等于n个的循环节,则答案是yes。若小于n个循环节,则最后一个循环节中未出现的字母的若干个加上前面每个循环节的最后一个就是不满足条件的子序列。

代码:

#include<bits/stdc++.h>
using namespace std;
#define endl "\n"
typedef long long ll;
typedef pair<int, int> PII;
typedef pair<PII, int> PIII;
const int inf = 0x3f3f3f3f;
const ll infinf = 0x3f3f3f3f3f3f3f3f;

//const int N = 

void solve() {
    int n, k, m; cin >> n >> k >> m;
    string s; cin >> s;

    set<char> st; int cnt = 0; vector<char> ans;
    for (int i = 0; i < m; i ++) {
        st.insert(s[i]);
        if (st.size() == k) {
            cnt ++;                 // 找循环节
            ans.push_back(s[i]);    // 将每个循环节的最后一个字母存储
            st.clear();
        }
    }

    if (cnt >= n) {
        cout << "YES" << endl;     
    }
    else {
        cout << "NO" << endl;
        vector<int> a(30);
        for (int i = 1; i <= 26; i ++) a[i] = 0;

        for (auto itr = st.begin(); itr != st.end(); ++ itr) {
            a[*itr - 'a' + 1] ++;           // 将最后一个不满的循环节中的字母记录
        }

        for (int i = 1; i <= k; i ++) {
            if (a[i] == 0) {                // 找缺少了哪个字母
                for (int j = 0; j < ans.size(); j ++) cout << ans[j];  // 输出之前的每个循环节的最后一个字母
                for (int j = ans.size() + 1; j <= n; j ++) { // 补上差的字母, 就一定是不满足的子序列
                    cout << char(i + 'a' - 1);
                }
                break;
            }
        }
        cout << endl;
    }

}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);

    int t; cin >> t;
    while (t --) solve();

    return 0;
}

相关推荐

  1. Codeforces Round 912 (Div. 2)补

    2024-01-29 13:16:03       39 阅读
  2. Codeforces Round 922 (Div. 2)(A~D)补

    2024-01-29 13:16:03       35 阅读
  3. Codeforces Round 912 (Div. 2)

    2024-01-29 13:16:03       40 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-29 13:16:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-29 13:16:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-29 13:16:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-29 13:16:03       20 阅读

热门阅读

  1. Uboot中ARMV7和ARMV8 MMU配置

    2024-01-29 13:16:03       23 阅读
  2. 【微信小程序框架的详细介绍】

    2024-01-29 13:16:03       34 阅读
  3. 面经——面试中常问到的计算机网络相关问题

    2024-01-29 13:16:03       36 阅读
  4. Spring Cloud 之 Gateway详解

    2024-01-29 13:16:03       33 阅读
  5. basicpython-6

    2024-01-29 13:16:03       27 阅读
  6. MySQL必看表设计经验汇总-上(精华版)

    2024-01-29 13:16:03       28 阅读
  7. ffmpeg4.0.4 ffmpeg.c 讲解

    2024-01-29 13:16:03       26 阅读
  8. 系统分析师-23年-上午试题

    2024-01-29 13:16:03       30 阅读
  9. 大语言模型-大模型基础文献

    2024-01-29 13:16:03       35 阅读