C. Did We Get Everything Covered?

2024-01-30 14:28
文章标签 get covered everything

本文主要是介绍C. Did We Get Everything Covered?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

给你两个整数 n 和 k 以及一个字符串 s 。
您的任务是检查是否所有长度为 n 的字符串都可以用前 k 个小写英文字母组成,并作为 s 的子序列出现。如果答案是否定的,那么您还需要打印一个长度为 n 的字符串,该字符串可以用前 k 个小写英文字母组成,但不会作为 s 的子序列出现。
如果有多个答案,您可以打印任意一个。
注: 如果从 b 中删除一些字符(可能为零)而不改变其余字符的顺序,就可以得到 a ,那么字符串 a 就被称为字符串 b 的子串。

输入:
第一行输入包含一个整数 t (1 ≤ t ≤ 1e5) ,即测试用例的数量。
每个测试用例的第一行包含 3 个整数 n(1 ≤ n ≤ 26),k(1 ≤ k ≤ 26),m(1 ≤ m ≤ 1000) ,其中 n 和 k 与输入中的描述相同, m 是字符串 s 的长度。
每个测试用例的第二行包含一个长度为 m 的字符串 s ,其中只有前 k 个小写英文字母。
保证所有测试用例的 m 和 n 之和不超过 1e6 。

输出:
对于每个测试用例,如果用前 k 个小写英文字母组成的长度为 n 的所有可能字符串都出现在 s 的子序列中,则打印 "YES",否则打印 "NO"。
如果答案为 "NO",请在下一行中打印一个长度为 n 的字符串,该字符串可以用第一个 k 小写英文字母组成,但不会作为 s 的子序列出现。

Input
3
2 2 4
abba
2 2 3
abb
3 3 10
aabbccabab

Output
YES
NO
aa
NO
ccc

注:
对于第一个测试用例,所有可能的长度为 2 的字符串(aa、ab、ba、bb),只要能用前 2 个英文字母组成,都会作为 abba 的子序列出现。长度为 2 的所有可能字符串(aa、ab、ba、bb)。
对于第二个测试用例,字符串 aa 不是 abb 的子序列。

解析:
容易想到在第一次出现的字母后,其它字母在后面必须出现至少 n-1 次;在第二次出现的字母后,其它字母在后面必须出现至少 n-2 次,以此类推。
因此就是在 s 中寻找 包含 k 个字母的循环节的出现次数,是否出现 n 次。
大于等于 n 次的,输出 “YES”;
不足 n 次的,输出 “NO”,每个循环节的最后一个字母+最后一次循环节未出现的字母 一定就是不属于 s 的子序列。

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define ios ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
int gcd(int a,int b) { return b? gcd(b,a%b) : a; }
typedef pair<int,int> PII;
const double PI=acos(-1.0);
const int N=2e6+10;
int n,k,m;
string s;
set <int> q;
int a[26];
vector <char> ans;
void solve()
{cin>>n>>k>>m;cin>>s;int cnt=0;q.clear(),ans.clear();memset(a,0,sizeof a);for (int i=0;i<m;i++){q.insert(s[i]);if (q.size()==k){cnt++;ans.push_back(s[i]);q.clear();}}if (cnt>=n) cout<<"YES\n";else {cout<<"NO\n";for (auto x:q) a[x-'a']++;for (int i=0;i<26;i++){if(a[i]==0){for (auto x:ans) cout<<x;for (int j=ans.size();j<n;j++) cout<<char('a'+i);cout<<endl;break;}}}
}
signed main()
{ios;int T=1;cin>>T;while (T--) solve(); return 0;
}

这篇关于C. Did We Get Everything Covered?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/660533

相关文章

10 Source-Get-Post-JsonP 网络请求

划重点 使用vue-resource.js库 进行网络请求操作POST : this.$http.post ( … )GET : this.$http.get ( … ) 小鸡炖蘑菇 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-w

API28_OKgo_get注意事项

1: implementation 'com.lzy.net:okgo:2.1.4' 2:在BaseApplication中onCreate()中初始化initOKgo() private void initOKgo() {//---------这里给出的是示例代码,告诉你可以这么传,实际使用的时候,根据需要传,不需要就不传-------------//HttpHeaders headers

项目一(一) HttpClient中的POST请求和GET请求

HttpClient中的POST请求和GET请求 一、HttpClient简述 HttpClient是Apache Jakarta Common下的子项目,用来提供高效的、最新的、功能丰富的支持HTTP协议的客户端编程工具包,并且它支持HTTP协议最新的版本和建议。HttpClient已经应用在很多的项目中,比如Apache Jakarta上很著名的另外两个开源项目Cactus和HTMLU

apt-get update更新源时,出现“Hash Sum mismatch”问题

转载自:apt-get update更新源时,出现“Hash Sum mismatch”问题 当使用apt-get update更新源时,出现下面“Hash Sum mismatch”的报错,具体如下: root@localhost:~# apt-get update ...... ...... W: Failed to fetch http://us.archive.ubuntu.com/ub

Flutter-使用dio插件请求网络(get ,post,下载文件)

引入库:dio: ^2.1.13可直接运行的代码:包含了post,get 下载文件import 'package:flutter/material.dart';import 'package:dio/dio.dart';void main() {runApp(new MaterialApp(title: 'Container demo',home: new visitNetPage(),)

Flutter-加三方库卡在flutter package get 的解决办法

Windows PUB_HOSTED_URL ===== https://pub.flutter-io.cnFLUTTER_STORAGE_BASE_URL ===== https://storage.flutter-io.cn 增加两个环境变量,然后执行一下 flutter doctor命令。问题完美解决。

【tensorflow 使用错误】tensorflow2.0 过程中出现 Error : Failed to get convolution algorithm

如果在使用 tensorflow 过程中出现 Error : Failed to get convolution algorithm ,这是因为显卡内存被耗尽了。 解决办法: 在代码的开头加入如下两句,动态分配显存 physical_device = tf.config.experimental.list_physical_devices("GPU")tf.config.experiment

【git】Your branch is up-to-date 和 Everything up-to-date

1、git commit 之后,出现 On branch masterYour branch is up-to-date with 'github/master'.nothing to commit, working tree clean 继续 git push之后,出现 Everything up-to-date 2、网上大部分解决办法,都是分支问题,比如 http://blo

_get_gt_mask、cat_mask、_get_other_mask

import torch# 定义获取标签掩码的函数def _get_gt_mask(logits, target):print("原始 logits:\n", logits)print("目标 target:\n", target)# 将 target 拉平为一维张量target = target.reshape(-1)print("拉平后的 target:\n", target)# 创建一个和

C#通过GET/POST方式发送Http请求

介绍http请求的两种方式,get和post方式。并用C#语言实现,如何请求url并获取返回的数据 两者的区别: 参数 Get请求把提交的数据进行简单编码,同时将url的一部分发送到服务器   比如url:Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB   所以get请求方式提交的数据存在一定的安全隐患