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]\)表示 ...
随机推荐
- 图片处理看这篇就完了「GitHub 热点速览 v.21.48」
作者:HelloGitHub-小鱼干 图像处理一直是个实用且热门的研究领域,而本周的 GitHub 项目则多个图像项目上榜.先是勉强和图像处理搭边的渲染引擎 Filament,它能渲染出效果极佳的 3 ...
- BehaviorTree.CPP行为树BT的装饰器节点(五)
Decorators 装饰器是只能有一个子项的节点. 由装饰者来决定是否,何时以及对子节点进行tick. InverterNode tick子节点一次,如果子节点失败则返回SUCCESS,如果孩子成功 ...
- [WC2021] 表达式求值
考虑我们显然可以对每位分开求解,考虑求出最终答案是\(A_i\)的方案数. 那么我们发现我们这样\(dp\)的话,显然不太行! 会有一个\(i\)的复杂度 但是如果我们做大于等于的话,就只用一遍\(d ...
- Codeforces 718E - Matvey's Birthday(思维题)
Codeforces 题面传送门 & 洛谷题面传送门 首先注意到这个图的特殊性:我们对于所有 \(s_i=s_j\) 的 \((i,j)\) 之间都连了条边,而字符集大小顶多只有 \(8\ ...
- Codeforces 1392I - Kevin and Grid(平面图的欧拉定理+FFT)
Codeforces 题面传送门 & 洛谷题面传送门 模拟赛考到一道和这题有点类似的题就来补了 神仙 GLBR I %%%%%%%%%%%%%%%%%%%% 不过感觉见过类似的题目之后就比较套 ...
- Contest 2050 and Codeforces Round #718 (Div. 1 + Div. 2) 题解
竟然上 GM 了,incredible( A 首先如果 \(2050\nmid n\) 那显然就 \(-1\) 了,否则答案显然为 \(\dfrac{n}{2050}\) 的各位数字和. B 显然这个 ...
- 9 Days 停课修炼题解集
xj4604 排序 \(n,k <= 1e5\). 先考虑二分出这个值,check 有多少段的平均值小于这个 mid,这个在之前的复活赛中是原题 T4,数形结合,$ \text{Average} ...
- Matlab 代码注释
Matlab 代码注释 一直在找类似doxygen一样将程序注释发表成手册的方法,现在发现,Matlab的publish功能自己就能做到. Publish 简介 并非所有注释都能作为文本进行输出,MA ...
- PicGo + Gitee +Typora实现markdown图床
目录 1. PicGo安装 2.Gitee配置 3.配置PicGo 3.Typora的设置 网上有一些很详细的教程,我这里只记录要点,其余部分按以下教程步骤来就行. 1. PicGo安装 国内下载可能 ...
- Python获取随机数
Python当中,可用random模块来获取随机数 import random """ random模块,用于获取随机数 """ print ...