CF544A Set of Strings 题解
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;
}
}
CF544A Set of Strings 题解的更多相关文章
- CF1320 Div1 D.Reachable Strings 题解
题目大意 给定一个长为\(n\)的01串\(S\),每次你可以对一个串的三个连续位置做:\(011 \rightarrow 110\),\(110 \rightarrow 011\)的操作. 有\(q ...
- CF1144A Diverse Strings 题解
Content 我们定义一个字符串是合法的,当且仅当这个字符串是"连续排列"(按照字母表顺序排序).现在给出 \(n\) 个字符串 \(s_1,s_2,s_3,...,s_n\), ...
- POJ2406:Power Strings——题解
http://poj.org/problem?id=2406 就是给一个串,求其循环节的个数. 稍微想一下就知道,KMP中nxt数组记录了所有可与前面匹配的位置. 那么如果我们的循环节长度为k,有n个 ...
- 洛谷 UVA10298 Power Strings 题解
Analysis 结论:设字符串长度为n,最长相同前后缀的长度为kmp[i],如n%(n-kmp[n])=0,则答案为n/(n-kmp[n]),否则为1. 如果循环节多于一个,以前n-kmp[n]个为 ...
- POJ2406 Power Strings 题解 KMP算法
题目链接:http://poj.org/problem?id=2406 题目大意:给你一个字符串 \(t\) ,\(t\) 可以表示为另一个小字符串循环了 \(K\) 了,求最大的循环次数 \(K\) ...
- CF447B DZY Loves Strings 题解
Content 有一个长度为 \(n\) 的仅含小写字母的字符串 \(s\) 以及 26 个英文小写字母的价值 \(W_\texttt{a},W_\texttt{b},...,W_\texttt{z} ...
- CF1547B Alphabetical Strings 题解
Content 我们有一个空的字符串,第 \(i\) 次操作我们可以将字母表中第 \(i\) 个字母加入字符串的最前面或最后面.我们称一个长度为 \(n\) 的字符串是合法的,当且仅当这个字符串可以通 ...
- CF1506C Double-ended Strings 题解
Content 有两个字符串 \(a,b\).我们每次操作可以将两个字符串中的一个字符串的最前面一个字符或这最后面一个字符删去(可以将某个字符串通过若干次操作变为空串).求需要多少次操作才能够使 \( ...
- [USACO12NOV]同时平衡线Concurrently Balanced Strings DP map 思维
题面 [USACO12NOV]同时平衡线Concurrently Balanced Strings 题解 考虑DP. \(f[i]\)表示以\(i\)为左端点的合法区间个数.令\(pos[i]\)表示 ...
随机推荐
- Java安全之Axis漏洞分析
Java安全之Axis漏洞分析 0x00 前言 看到个别代码常出现里面有一些Axis组件,没去仔细研究过该漏洞.研究记录一下. 0x01 漏洞复现 漏洞版本:axis=<1.4 Axis1.4 ...
- k8s statefulset controller源码分析
statefulset controller分析 statefulset简介 statefulset是Kubernetes提供的管理有状态应用的对象,而deployment用于管理无状态应用. 有状态 ...
- [CCC2019] Tourism题解
我们先考虑一下拿部分分: subtask1 考虑因为 \(n < 2k\) ,那么我们的划分一定是从中间某个地方裁开,且满足 \(k\) 的条件的,我们发现当划分点在 \([n\ mod\ k, ...
- Codeforces 1290F - Making Shapes(数位 dp)
Codeforces 题面传送门 & 洛谷题面传送门 数位 dp 好题. 首先,由于是凸包,一但向量集合确定,凸包的形态肯定就已经确定了.考虑什么样的向量集合能够组成符合条件的凸包,我们假设第 ...
- linux 两服务器之间的文件传输scp
Linux scp 命令用于 Linux 之间复制文件和目录. scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令. scp 是加 ...
- APP工程师接入Telink Mesh流程 -3
加密是为了使网络更加的安全.健壮,若由于login.加密等流程 严重影响了 开发进程,也可以通过 修改SDK 固件 将login.加密 环节取消 1.发送数据.接受数据加密,解密去掉 mesh_sec ...
- 关于vim复制剪贴粘贴命令的总结-转
最近在使用vim,感觉很好很强大,但是在使用复制剪切粘贴命令是,碰到了一些小困惑,网上找了一些资料感觉很不全,讲的也不好,遂自己进行实践并总结了. 首先是剪切(删除): 剪切其实也就顺带删除了所选择的 ...
- FFmpeg笔记:使用MSVC工具链编译Windows版本静态库、动态库
2019年3月开始,为了将音视频编解码功能集成到Cocos2d-x中,开始接触到FFmpeg: 当时开发环境还在Mac下,编译FFmpeg相比现在用Windows平台要方便的多: 最近,公司内部有个U ...
- C/C++ Qt StringListModel 字符串列表映射组件
StringListModel 字符串列表映射组件,该组件用于处理字符串与列表框组件中数据的转换,通常该组件会配合ListView组件一起使用,例如将ListView组件与Model模型绑定,当Lis ...
- 日常Java 2021/10/27
java HashMap HashMap是一个散列表,它存储的内客是键值对(key-value)映射.HashMap实现了Map.接口,根据键的HashCode值存储数据,具有很快的访问速度,最多允许 ...