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桑想让自己孩子的名字和自己一样由 ...
随机推荐
- codeforces 451E Devu and Flowers
题意:有n个瓶子每个瓶子有 f[i] 支相同的颜色的花(不同瓶子颜色不同,相同瓶子花视为相同) 问要取出s支花有多少种不同方案. 思路: 如果每个瓶子的花有无穷多.那么这个问题可以转化为 s支花分到 ...
- 黑马程序员——OC语言 三大特性之继承
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) 三大特性之继承 (一)继承的基本用法 先建立个Animal再用Dog继承前 ...
- Get IP Address in Android 4.0+
在android2.3以下的系统中,可以使用如下的代码来获取Android系统的本地IP地址: [java] private String getLocalIPAddress() throws So ...
- 使用python-openCV对摄像头捕捉的镜头进行二值化并打上文字
用CaptureFromCAM函数对图像进行提取: capture = cv.CaptureFromCAM(0) 读取直接的视频文件只需将语句改变为: capture = cv.VideoCaptur ...
- eclipse新建安卓项目点击finish后窗口无法关闭
eclipse新建安卓项目点击finish后窗口不会自动关闭,而且工程会有很多报错: 如图,这个页面点击finish一直无法关闭,后来试了试,才发现是因为新建项目的第一个页面的sdk版本的问题: 这里 ...
- 68. 蓄水池抽样(Reservoir Sampling)
[本文链接] http://www.cnblogs.com/hellogiser/p/reservoir-sampling.html 问题起源于编程珠玑Column 12中的题目10,其描述如下: H ...
- 去掉EditPlus自动备份bak文件
用EditPlus编辑文件是总是自动生成一个.bak文件. 其实想去掉EditPlus的自动备份也简单,方法如下: 打开菜单栏上的:工具->参数设置->文件 去掉“保存时创建备份文件”前的 ...
- 加载json文件没显示图片
IOS 9新特性要求App内访问的网络必须使用HTTPS协议. 但是现在公司的项目使用的是HTTP协议,使用私有加密方式保证数据安全.现在也不能马上改成HTTPS协议传输. 以下解决办法: 在info ...
- sublime test 3 使用及常用插件
1.家里不能安装问题 公司可以安装,但回到家里安装不上 package control,看了是网络方面原因,具体就没去了解... 所有建议: 安装后在sublime text目录下 新建 Date目录 ...
- Python学习笔记——Day3
Python字典(Dictionary) 字典是一种可变容器模型,可存储任意类型对象. 字典的每个键值(key => value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花 ...