Codeforces724D [字符串][乱搞][贪心]
/*
不要低头,不要放弃,不要气馁,不要慌张
题意:给你一个区间长度n和一个字符串,要求在字符串中选择一些symbol使得字符串的任意长度为n的子区间都存在至少一个symbol。
任意选取symbol,输出符合条件的symbol所有集合按照任意顺序排序的字典序最小的字符串。
思路:
1.明确 aaab 的字典序要小于aab。而aaab的字典序要小于aaabb。
那么假如从a到x(x是某个字母)全部采用也无法符合题意,但是从a到x+1全部采用能符合题意。
我们需要做的是,找最少需要多少个x+1使得在采用a到x所有字母的前提下,使用尽量少的x+1符合题意。
2.以下思路可能过绕。(因为看别人AC代码很短)所以慎入。
aft[i][j]代表在第i个位置以后距离第i个位置最近的j字母距离第i个位置的距离。
然后每加入一个字母就用now[i]更新,代表距离第i个位置以后第i个位置最近的被选为symbol的字母距离第i个位置的距离。
然后找到刚才提到的x+1以后就可以贪心得安排选取哪些使得采用的数目最小。
坑:坑在最后的贪心啦。这题做完以后,我对自己的逻辑产生了很大的质疑...以后逻辑要多靠脑子想,不能一味依赖手动检测,否则效率太低了...嗷嗷 */ #include<bits/stdc++.h>
using namespace std;
char jilu[];
int shu[];
int bbf[][],aft[][],me[][],now[],bf[];
int gg[];
int rel[];
int main()
{
int n;
scanf("%d",&n);
scanf("%s",jilu);
int len=strlen(jilu);
for(int i=;i<len;i++){
shu[i]=jilu[i]-'a';
}
for(int i=;i<len;i++){
gg[shu[i]]++;
}
for(int i=;i<;i++){
int st=-1e9;
for(int j=;j<len;j++){
if(shu[j]==i)st=j;
bbf[j][i]=st;
}
st=1e9;
for(int j=len-;j>=;j--){
if(shu[j]==i)st=j;
aft[j][i]=st;
}
for(int j=;j<len;j++){
me[j][i]=aft[j][i]-j+;
}
}
for(int i=;i<;i++){
bool ok=;
for(int j=;j<=len-n;j++){
bf[j]=now[j];
if(i==)now[j]=me[j][i];
else now[j]=min(now[j],me[j][i]);
if(now[j]>n)ok=;
}
if(ok){
int num=;
if(i==){
for(int j=;j<=len-n;j++){
rel[j]=j;
}
num=len-n+;
}
else{
for(int j=;j<=len-n;j++){
if(bf[j]>n)rel[num++]=j;
}
}
for(int j=;j<i;j++){
for(int k=;k<gg[j];k++)printf("%c",'a'+j);
}
int aaa=,bbb=,bf=-;
bool ook=;
while(bbb<len){
if(shu[bbb]==i){
if(bbb-rel[aaa]+>n){
ook=;
printf("%c",'a'+i);
while(aaa<num&&rel[aaa]<=bf){
aaa++;
}
}
if(aaa==num)break;
bf=bbb;
}
bbb++;
}
if(!ook||aaa!=num)printf("%c",'a'+i);
break;
}
}
return ;
}
Codeforces724D [字符串][乱搞][贪心]的更多相关文章
- bzoj 2217 [Poi2011]Lollipop 乱搞 贪心
2217: [Poi2011]Lollipop Time Limit: 15 Sec Memory Limit: 64 MBSec Special JudgeSubmit: 383 Solved ...
- CF1082E Increasing Frequency (multiset+乱搞+贪心)
题目大意: \(给你n个数a_i,给定一个m,你可以选择一个区间[l,r],让他们区间加一个任意数,然后询问一次操作完之后,最多能得到多少个m\) QWQ 考场上真的** 想了好久都不会,直到考试快结 ...
- Codeforces 732e [贪心][stl乱搞]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变 ...
- “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】
黑白图像直方图 发布时间: 2017年7月9日 18:30 最后更新: 2017年7月10日 21:08 时间限制: 1000ms 内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...
- hash进阶:使用字符串hash乱搞的姿势
前言 此文主要介绍hash的各种乱搞方法,hash入门请参照我之前这篇文章 不好意思hash真的可以为所欲为 在开头先放一下题表(其实就是我题解中的hash题目qwq) 查询子串hash值 必备的入门 ...
- 洛谷P5211 [ZJOI2017]字符串(线段树+乱搞)
题面 传送门 题解 为什么大佬们全都是乱搞的--莫非这就是传说中的暴力能进队,乱搞能AC-- 似乎有位大佬能有纯暴力+玄学优化\(AC\)(不算上\(uoj\)的\(Hack\)数据的话--这要是放到 ...
- SCOI 2013 密码 & 乱搞
题意: Fish 是一条生活在海里的鱼.有一天他很无聊,就到处去寻宝.他找到了位于海底深处的宫殿,但是一扇带有密码锁的大门却阻止了他的前进.通过翻阅古籍,Fish 得知了这个密码的相关信息:1. 该密 ...
- BZOJ4401:块的计数(乱搞)
Description 小Y最近从同学那里听说了一个十分牛B的高级数据结构——块状树.听说这种数据结构能在sqrt(N)的时间内维护树上的各种信息,十分的高效.当然,无聊的小Y对这种事情毫无兴趣,只是 ...
- BZOJ4236:JOIOJI(乱搞)
Description JOIOJI桑是JOI君的叔叔.“JOIOJI”这个名字是由“J.O.I”三个字母各两个构成的. 最近,JOIOJI桑有了一个孩子.JOIOJI桑想让自己孩子的名字和自己一样由 ...
随机推荐
- .htaccess语法中RewriteCond和RewriteRule意义
今天看了301重定向设置的方法,对网站的首页权重有较重要意义.于是看了别人写的.htaccess文件发现一头雾水,于是查了一些资料来进一步理解. RewriteCond语法 RewriteCond T ...
- cookie 路径问题
Path – 路径.指定与cookie关联的WEB页.值可以是一个目录,或者是一个路径.如果http://www.zdnet.com/devhead /index.html 建立了一个cookie,那 ...
- erlang中的lists:foldl()的用法,格式转换实例应用
lists:foldl(fun(),参数1,参数2):这个函数就是先把参数1传给fun()处理,然后将参数2(列表)中每一个元素,依次传给fun()函数进行处理. lists:foldl(fun(El ...
- 【个人使用.Net类库】(3)Excel文件操作类(基于NPOI)
Web开发工作中经常要根据业务的需要生成对应的报表.经常采用的方法如下: 将DataTable导出至Excel文件; 读取模板Excel文件; 修改模板Excel文件对应的内容. 因此,便想到封装一个 ...
- 关于一些学习html和css的笔记
一.Html简介 全写: HyperText Mark-up Language 译名: 超文本标识语言 简释:一种为普通文件中某些字句加上标示的语言,其目的在于运用标签(tag)使文件 达到预期的 ...
- 修改 UISearchBar cancelButton 样式
今天收到个问题,老大让我修改UISearchBar cancelButton的样式本来以为很简单的一个活,没想到让我长知识了. 开始在网上搜到的方法和我想象的一样,通过遍历Subviews获得butt ...
- c/c++面试题(5)(c++重要的概念详解)
1.C++面向对象的三大特征? 1)封装:将客观事物封装成抽象的类,并且设计者可以对类的成员进行访问控制权限控制. 这样一方面可以做到数据的隐藏,保护数据安全;另一方面,封装可以修改类的内部 实现而不 ...
- ETL工具与脚本实现之间的对比
scripts, custom code and individual vs. team development doesn’t scale And: ‣Lack of coding standard ...
- oracle查看当前用户权限
查看用户和默认表空间的关系select username,default_tablespace from dba_users;--查看当前用户能访问的表select * from user_table ...
- OpenSSL - 利用OpenSSL自签证书和CA颁发证书
秘钥操作 这个命令会生成一个1024/2048位的密钥,包含私钥和公钥. openssl genrsa -out private.key 1024/2038 ( ...