Content

有一个长为 \(n\) 的字符串 \(q\),试问能否将其划分为 \(k\) 个子串,使得每个子串的首字母都不相等,可以的话输出 \(\texttt{YES}\) 并输出任意一个方案,否则输出 \(\texttt{NO}\)。

数据范围:\(1\leqslant n\leqslant 100,1\leqslant k\leqslant 26\)。

Solution

我们可以考虑这样的一个流程:

  • 输入字符串后,一个一个去扫。
  • 如果有一个之前没有出现过的字母,就立刻建立新的一个空子串。之后,将当前字符加入到当前子串里面(有可能是之前已经有字母在里面的子串,而不是新的子串)。

看不懂的话可以参照下面这个数据:

10
whenthereisawillthereisaway

下面是模拟过程——

  • 从第一个字符 \(\texttt{w}\) 开始。
  • 建立第一个空子串。将第一个字符加入到这个子串里面,这时,第一个子串是 \(\texttt{w}\)。
  • 扫到第二个字符 \(\texttt{h}\),前面没有出现过,则建立第二个空子串,并将第二个字符加入到这个子串里面,这时,第二个子串是 \(\texttt{h}\)。
  • 扫到第三个字符 \(\texttt{e}\),前面没有出现过,则建立第三个空子串,并将第三个字符加入到这个子串里面,这时,第三个子串是 \(\texttt{e}\)。
  • 扫到第四个字符 \(\texttt{n}\),前面没有出现过,则建立第四个空子串,并将第四个字符加入到这个子串里面,这时,第四个子串是 \(\texttt{n}\)。
  • 扫到第五个字符 \(\texttt{t}\),前面没有出现过,则建立第五个空子串,并将第五个字符加入到这个子串里面,这时,第五个子串是 \(\texttt{t}\)。
  • 扫到第六个字符 \(\texttt{h}\),前面出现过,则将第六个字符加入到第五个子串里面,这时,第五个子串是 \(\texttt{th}\)。

以此类推,这样,最后的十个子串分别是 \(\texttt{w}\)、\(\texttt{h}\)、\(\texttt{e}\)、\(\texttt{n}\)、\(\texttt{the}\)、\(\texttt{re}\)、\(\texttt{i}\)、\(\texttt{s}\)、\(\texttt{awi}\)、\(\texttt{llthereisaway}\)。

你也可以试试 \(k=17\) 的情况,此时应该输出 \(\texttt{NO}\),具体请读者自行模拟。

Code

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <iostream>
#include <cmath>
#include <map>
using namespace std; int k, num;
string s, spre[107];
map<char, int> vis; int main() {
scanf("%d", &k);
cin >> s;
num = 1;
spre[num] += s[0];
vis[s[0]] = 1;
for(int i = 1; i < s.size(); ++i) {
if(!vis[s[i]]) {
num++;
if(num > k) {
for(int j = i; j < s.size(); ++j)
spre[num - 1] += s[j];
break;
}
vis[s[i]] = 1;
}
spre[num] += s[i];
}
if(num < k) return printf("NO"), 0;
else {
puts("YES");
for(int i = 1; i <= num; ++i)
cout << spre[i] << endl;
}
}

最新文章

  1. .NET Core dotnet 命令大全
  2. py-faster-rcnn之python引入_caffe.so
  3. [deviceone开发]-大家比较关注的应用内部升级
  4. 《BI项目笔记》基于雪花模型的维度设计
  5. 04-Vue入门系列之Vue事件处理
  6. session讲解(二)——商城购物车练习
  7. Unity3D 使用 Editor 脚本,自定义 脚本的属性面板
  8. python 网络编程 (二)---异常
  9. 使用hibernate更新数据库记录的信息的相关学习记录
  10. 关于Oracle SQL/82标准和SQL/92标准
  11. 字符编码的种类:ASCII、GB2312、GBK、GB18030、Unicode、UTF-8、UTF-16、Base64
  12. win10 uwp 自定义控件初始化
  13. tpshop使用自带极光推送
  14. Python 项目实践一(外星人入侵小游戏)第二篇
  15. kotlin中“==”和“===”的区别
  16. 协程实现多并发socket,跟NGINX一样
  17. 关于oracle中varchar2与nvarchar2的一点认识
  18. POJ 2509
  19. python 读取单所有json数据写入mongodb(单个)
  20. HOW TO: 在 Visual C# .NET 应用程序中提供文件拖放功能

热门文章

  1. [bzoj1232]安慰奶牛
  2. [noi1755]Trie
  3. Python之阶乘代码
  4. Python画一个四点连线并计算首尾距离
  5. 定时任务注解@Scheduled
  6. DirectX12 3D 游戏开发与实战第十章内容(上)
  7. R 语言实战-Part 5-1笔记
  8. 解决sourceforge下载文件慢的方法
  9. Hive-insert into table 与 insert overwrite table 区别
  10. Python | 迭代器与zip的一些细节