常州模拟赛d4t3 字符串划分
题目描述
给你一串由小写字母组成的字符串,希望你把它划分成一些小段,使得每一小段字符串中的字母
都不相同,并且希望分的段数尽量少。
然后,把这些小段按字典序排序后输出,中间由一个空格分隔。
例如:字符串 ”nnsmpmn”,最少分成 3 小段:”n”,”nsmp”,”mn”。
排序后输出:mn n nsmp
注意,有时候符合上面要求的方案可能有多个,就要输出排序后字典序最小的那个。
例如:字符串 ”aba” 可以有 2 种划分:a/ba 和 ab/a,排序后分别是:”a ba” 和 ”a ab”。
应该输出:a ab
输入输出格式
输入格式:
第一行包含 1 个正整数 k,表示有 k 组任务。
之后 k 行每行包含 1 个由小写字母组成的字符串 S。
输出格式:
共 k 行每行表示一个字符串的拆分方案。
输入输出样例
4
facetiously
aaaaa
aba
babb
facetiously
a a a a a
a ab
ab b b
说明
对于 30% 的数据:|S| ≤ 10; 对于 100% 的数据:k ≤ 10,|S| ≤ 50。
分析:细节题害死人QAQ.
显然这是一道dp题,设f[i]为1~i位的最优结果,要记录一个二元组:分了多少个、分的字符串是啥,然后f[i] = min{f[j] + t},这个加法和min要我们自己来定义.总之就是细节题.
以后不要轻易用string了,在类里面开一个string数组总是报错.
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <string>
#include <cmath> using namespace std; int k;
bool vis[];
char S[]; struct node
{
int tot;
char ss[];
}; struct node2
{
int cnt;
node s[];
}f[]; bool cmp2(node a, node b)
{
for (int i = ; i <= min(a.tot, b.tot); i++)
{
if (a.ss[i] != b.ss[i])
return a.ss[i] < b.ss[i];
}
return a.tot < b.tot;
} bool cmp(node2 a, node2 b)
{
if (a.cnt != b.cnt)
return a.cnt < b.cnt;
for (int i = ; i <= a.cnt; i++)
return cmp2(a.s[i],b.s[i]);
} int main()
{
scanf("%d", &k);
while (k--)
{
scanf("%s", S + );
int sizee = strlen(S + );
for (int i = ; i <= sizee; i++)
f[i].cnt = sizee + ;
for (int i = ; i <= sizee; i++)
{
memset(vis, false, sizeof(vis));
for (int j = i - ; j >= ; j--)
{ if (vis[S[j + ] - 'a'])
break;
vis[S[j + ] - 'a'] = ;
node2 t = f[j];
t.cnt++;
for (int k = j + ; k <= i; k++)
{
t.s[t.cnt].tot++;
t.s[t.cnt].ss[k - j] = S[k];
}
sort(t.s + , t.s + + t.cnt, cmp2);
if (cmp(t, f[i]))
f[i] = t;
}
}
for (int i = ; i <= f[sizee].cnt; i++)
{
for (int j = ; j <= f[sizee].s[i].tot; j++)
cout << f[sizee].s[i].ss[j];
printf(" ");
}
cout << endl; } return ;
}
常州模拟赛d4t3 字符串划分的更多相关文章
- 计蒜客蓝桥杯模拟赛 后缀字符串:STL_map+贪心
问题描述 一天蒜头君得到 n 个字符串 si,每个字符串的长度都不超过 10. 蒜头君在想,在这 n 个字符串中,以 si 为后缀的字符串有多少个呢? 输入格式 第一行输入一个整数 n. 接下来 ...
- NOIP第二次模拟赛 stage1【划分数列(seq.pas/c/cpp)
7划分数列(seq.pas/c/cpp) [题目描述] 给你一个有n个元素的数列,要求把它划分成k段,使每段元素和的最大值最小 [输入格式] 第一行两个正整数n,k 第二行为此数列ai [输出格式] ...
- Hidden (NOIP模拟赛)(字符串模拟QAQ)
原题传送门 神奇的题目诶 原来以为字符串比较一定要O(NlogN) 结果发现可以均摊O(N) 首先我们来讲一讲原理 我们有3个指针i,j,k i=0,j=1,k=0 一开始我们不断对k+1直到找到ch ...
- 常州模拟赛d4t1 立方体
题目描述 立方体有 6 个面,每个面上有一只奶牛,每只奶牛都有一些干草.为了训练奶牛的合作精神,它 们在玩一个游戏,每轮:所有奶牛将自己的干草分成 4 等份,分给相邻的 4 个面上的奶牛. 游戏开始, ...
- 常州模拟赛d3t1 神在夏至祭降下了神谕
题目描述 我们村子在过去的400年中,断绝与下界的接触,过着自给自足的生活. 夏至祭是一场迎接祖灵于夏季归来,同时祈求丰收的庆典. 村里的男人会在广场上演出夏之军和冬之军的战争.夏之军会打倒冬之军的大 ...
- 常州模拟赛d1t5 遗忘口令
就像每个人都会遇到的问题一样,贝西忘了在 cowtube 上的口令.不过,她还记着一些关于口令 的信息.首先,她确定口令由小写字母组成,长度为 L.其次,这个密码是由几个单词组合而成 的.贝西一共认识 ...
- 20181228 模拟赛 T3 字符串游戏 strGame 博弈论 字符串
3 字符串游戏(strGame.c/cpp/pas) 3.1 题目描述 pure 和 dirty 决定玩 T 局游戏.对于每一局游戏,有n个字符串,并且每一局游戏由K轮组成.具体规则如下:在每一轮 ...
- 常州模拟赛d5t3 appoint
分析:这道题比较奇葩.因为字符串没有swap函数,所以一个一个字符串交换只有30分.但是我们可以不用直接交换字符串,而是交换字符串的指针,相当于当前位置是哪一个字符串,每次交换int,可以拿60分. ...
- 常州模拟赛d7t3 水管
分析:第一问还是很好做的,关键是怎么做第二问.我们可以每次删掉最小生成树上的一条边,然后再求一次最小生成树,看边权和大小和原来的是不是一样的,不过这个做法效率很低. 考虑Kruskal算法的原理,每次 ...
随机推荐
- 推荐一个yaml文件转json文件的在线工具
YAML的全称是YAML Ain't Markup Language,是一种简洁的非标记语言,以数据为中心,使用空白,缩进,和分行组织数据,从而使得表示更加简洁易读. YAML如今广泛应用于微服务开发 ...
- android 焦点 ListView 点击事件获取失败
1. 在ListView 中, 创建一个app_item.xml 布局文件 在布局文件中有如下的代码: <CheckBox android:id="@+id/cb_t ...
- Injection of autowired dependencies failed;错误解决
代码自动生成的时候可能出现这个问题,反正我是找了半天才发现.serviceimp层不要写抽象类的声明abstract,这个删掉.
- shell脚本,打印九九乘法表。
[root@localhost ~]# .sh #!/bin/bash #计算九九乘法表 ` do ` do [ $j -le $i ] && echo -n "$i*$j= ...
- ios之UISplitViewController
iPad的屏幕比iPhone大,所以在界面上,iPad比iPhone多一个UISplitViewController,用来实现iPad在横屏时,分两栏显示所需要的界面,可以一边是目录一边是具体的内容. ...
- c++ 将输入存储到数组,然后反转数组,最后输出
// 输入一个包含多个double元素的数组,先打印结果,然后反转出头和尾元素之外的所有元素,最后再打印结果 #include <iostream> using namespace std ...
- verilog behavioral modeling--overview
1.verilog behavioral models contain procedural statements that control the simulation and manipulate ...
- day23 03 组合的例子
day23 03 组合的例子 一.用到组合的方式,编写一个圆环,并能够计算出它的周长和面积 from math import pi # 从内置函数里面导入pi # 先定义一个圆类 class Circ ...
- pymongo的简单使用
pymongo的使用 首先安装: pip install pymongo 安装好了使用 import pymongo # 链接mongodb,得到一个mongoclient的客户端对象 client ...
- (转)Objective-C语言--属性和实例变量
本文转自http://blog.csdn.net/addychen/article/details/39525681 使用Objective-C一段时间了,一直没有弄清楚在Objective-C中属性 ...