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 题解的更多相关文章

  1. CF1320 Div1 D.Reachable Strings 题解

    题目大意 给定一个长为\(n\)的01串\(S\),每次你可以对一个串的三个连续位置做:\(011 \rightarrow 110\),\(110 \rightarrow 011\)的操作. 有\(q ...

  2. CF1144A Diverse Strings 题解

    Content 我们定义一个字符串是合法的,当且仅当这个字符串是"连续排列"(按照字母表顺序排序).现在给出 \(n\) 个字符串 \(s_1,s_2,s_3,...,s_n\), ...

  3. POJ2406:Power Strings——题解

    http://poj.org/problem?id=2406 就是给一个串,求其循环节的个数. 稍微想一下就知道,KMP中nxt数组记录了所有可与前面匹配的位置. 那么如果我们的循环节长度为k,有n个 ...

  4. 洛谷 UVA10298 Power Strings 题解

    Analysis 结论:设字符串长度为n,最长相同前后缀的长度为kmp[i],如n%(n-kmp[n])=0,则答案为n/(n-kmp[n]),否则为1. 如果循环节多于一个,以前n-kmp[n]个为 ...

  5. POJ2406 Power Strings 题解 KMP算法

    题目链接:http://poj.org/problem?id=2406 题目大意:给你一个字符串 \(t\) ,\(t\) 可以表示为另一个小字符串循环了 \(K\) 了,求最大的循环次数 \(K\) ...

  6. CF447B DZY Loves Strings 题解

    Content 有一个长度为 \(n\) 的仅含小写字母的字符串 \(s\) 以及 26 个英文小写字母的价值 \(W_\texttt{a},W_\texttt{b},...,W_\texttt{z} ...

  7. CF1547B Alphabetical Strings 题解

    Content 我们有一个空的字符串,第 \(i\) 次操作我们可以将字母表中第 \(i\) 个字母加入字符串的最前面或最后面.我们称一个长度为 \(n\) 的字符串是合法的,当且仅当这个字符串可以通 ...

  8. CF1506C Double-ended Strings 题解

    Content 有两个字符串 \(a,b\).我们每次操作可以将两个字符串中的一个字符串的最前面一个字符或这最后面一个字符删去(可以将某个字符串通过若干次操作变为空串).求需要多少次操作才能够使 \( ...

  9. [USACO12NOV]同时平衡线Concurrently Balanced Strings DP map 思维

    题面 [USACO12NOV]同时平衡线Concurrently Balanced Strings 题解 考虑DP. \(f[i]\)表示以\(i\)为左端点的合法区间个数.令\(pos[i]\)表示 ...

随机推荐

  1. C/C++ Qt ToolBar 菜单组件应用

    ToolBar工具栏在所有窗体应用程序中都广泛被使用,使用ToolBar可以很好的规范菜单功能分类,用户可根据菜单栏来选择不同的功能,Qt中默认自带ToolBar组件,当我们以默认方式创建窗体时,To ...

  2. 谱文混排之lilypond-book

    Lilypond有自带的谱文混排的工具lilypond-book,但是作为外行,一直很难搞清楚这个操作是怎样做的.很久之前请教过别人,但介于我的个人能力,只有粗浅理解,操作不得要领.在许多信息的拼凑之 ...

  3. springboot项目中常遇到的问题-初学者最容易犯的错

    1.在spring中有两个main方法 2.在idea中少提代码类了,或者某类中代码依赖关系没解决掉

  4. HDU 3267 Graph Game(博弈论+图论+暴力)

    题面传送门 题意: 有一棵 \(n\) 个节点的图 \(G\),R 和 B 两个人轮流操作,R 先操作. 每次操作 R 可以染红任意一条未染色的边,B 可以染蓝任意一条未染色的边 R 的目标是染成一棵 ...

  5. IO流中的字符输入输出流及try...catch处理流处理中的异常

    使用字节流读取中文的问题 import java.io.FileInputStream; import java.io.IOException; /* 使用字节流读取中文文件 1个中文 GBK:占用两 ...

  6. [源码解析] PyTorch 分布式 Autograd (6) ---- 引擎(下)

    [源码解析] PyTtorch 分布式 Autograd (6) ---- 引擎(下) 目录 [源码解析] PyTtorch 分布式 Autograd (6) ---- 引擎(下) 0x00 摘要 0 ...

  7. 日常Java 2021/10/21

    Java Iterator(迭代器) 如果需要使用iterator类需要从java.util包中引入它 Java Iterator不是一个集合,它是一种访问集合的方法,用于迭代ArrayList和Ha ...

  8. 关于redis HSCAN count参数不生效的问题

    这的确是个坑,HSCAN是为了处理大量数据而设计的,可能也是因为这个原因,在数据量较少的情况下count参数并不会生效,具体阈值是多少并没有实际测验过不过可以断定的是一百条数据一下估计是不会生效的.

  9. ceph对象存储场景

    安装ceph-radosgw [root@ceph-node1 ~]# cd /etc/ceph # 这里要注意ceph的源,要和之前安装的ceph集群同一个版本 [root@ceph-node1 c ...

  10. Hbase(一)【入门安装及高可用】

    目录 一.Zookeeper正常部署 二.Hadoop正常部署 三.Hbase部署 1.下载 2.解压 3.相关配置 4.分发文件 5.启动.关闭 6.验证 四.HMaster的高可用 一.Zooke ...