http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1255

1255 字典序最小的子序列

题目来源: 天津大学OJ
基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题
收藏
关注
给出一个由a-z组成的字符串S,求他的一个子序列,满足如下条件:

1、包含字符串中所有出现过的字符各1个。
2、是所有满足条件1的串中,字典序最小的。
 
例如:babbdcc,出现过的字符为:abcd,而包含abcd的所有子序列中,字典序最小的为abdc。
Input
输入1行字符串S,所有字符均为小写,字符串的长度为L。(1 <= L <= 100000)。
Output
输出包含S中所有出现过的字符,每个字符各1个,并且字典序最小的S的子序列。
Input示例
babbdcc
Output示例
abdc

一开始只考虑了待替换字符后面相邻的那一个字符没想到还有可能出现后面数个在后面都可以被更换使得字典序更小的情况,改了以后还是WA竟然是因为前缀和数组zz的写错了cao。。。
假设字符x已经出现过了,现在考虑将x删掉查到后面会不会使得结果更优,那么x后面肯定要出现一个小于x的字符且这二者间的字符再后面都要能替换,否则的话并不能使答案优化。
 #include<bits/stdc++.h>
using namespace std;
char s[];
deque<char>q;
bool vis[];
int num[];
int main()
{
scanf("%s",s+);
int len=strlen(s+),n,m,i,j,k;
for(i=;i<=len;++i) num[s[i]-'a']++;
for(i=;i<=len;++i)
{
if(!vis[s[i]-'a']){
vis[s[i]-'a']=;
q.push_back(s[i]);
}
else{
for(j=;j<q.size();++j)
{
if(q[j]==s[i]){int j1=-;
{
for(k=j+;k<q.size();++k){
if(q[k]<q[j]){j1=k;break;}
}
if(j1!=-){
bool ok=;
for(k=j+;k<j1;++k)
{
if(num[q[k]-'a']<=){ok=;break;}
}
if(ok){
q.erase(q.begin()+j);
q.push_back(s[i]);
}
}
}
break;
}
}
}
num[s[i]-'a']--;
}
for(int i=;i<q.size();++i)cout<<q[i];puts("");
return ;
}

还有一种做法是用栈。

如果当前元素已经在栈中,则不用操作,否则判断栈顶元素大于当前元素的在后面是否还会出现,如果会的话pop掉,直到栈空或不满足条件或栈顶元素小的情况停止pop,把si入栈。     二者时间差不大多。

 #include<bits/stdc++.h>
using namespace std;
char s[];
stack<char>q;
bool vis[];
int num[];
void out()
{
if(q.empty()) return;
char c=q.top();q.pop();
out();
cout<<c;
}
int main()
{
scanf("%s",s+);
int len=strlen(s+),n,m,i,j,k;
for(i=;i<=len;++i) num[s[i]-'a']++;
for(i=;i<=len;num[s[i++]-'a']--)
{
if(vis[s[i]-'a']) continue;
while(!q.empty()&&q.top()>s[i]&&num[q.top()-'a']>) {vis[q.top()-'a']=;q.pop();}
q.push(s[i]);
vis[s[i]-'a']=;
}
out();puts("");
return ;
}

51nod 1255 贪心/构造的更多相关文章

  1. 贪心+构造 Codeforces Round #277 (Div. 2) C. Palindrome Transformation

    题目传送门 /* 贪心+构造:因为是对称的,可以全都左一半考虑,过程很简单,但是能想到就很难了 */ /************************************************ ...

  2. 贪心/构造/DP 杂题选做

    本博客将会收录一些贪心/构造的我认为较有价值的题目,这样可以有效的避免日后碰到 P7115 或者 P7915 这样的题就束手无策进而垫底的情况/dk 某些题目虽然跟贪心关系不大,但是在 CF 上有个 ...

  3. 贪心/构造/DP 杂题选做Ⅱ

    由于换了台电脑,而我的贪心 & 构造能力依然很拉跨,所以决定再开一个坑( 前传: 贪心/构造/DP 杂题选做 u1s1 我预感还有Ⅲ(欸,这不是我在多项式Ⅱ中说过的原话吗) 24. P5912 ...

  4. 贪心/构造/DP 杂题选做Ⅲ

    颓!颓!颓!(bushi 前传: 贪心/构造/DP 杂题选做 贪心/构造/DP 杂题选做Ⅱ 51. CF758E Broken Tree 讲个笑话,这道题是 11.3 模拟赛的 T2,模拟赛里那道题的 ...

  5. 51nod 1163贪心

    用优先队列来贪心,是一个很好地想法.优先队列在很多时候可以维护最值,同时可以考虑到一些其他情况. http://www.51nod.com/onlineJudge/questionCode.html# ...

  6. Codeforces Round #301 (Div. 2)(A,【模拟】B,【贪心构造】C,【DFS】)

    A. Combination Lock time limit per test:2 seconds memory limit per test:256 megabytes input:standard ...

  7. Codeforces 1082D Maximum Diameter Graph (贪心构造)

    <题目链接> 题目大意:给你一些点的最大度数,让你构造一张图,使得该图的直径最长,输出对应直径以及所有的边. 解题分析:一道比较暴力的构造题,首先,我们贪心的想,要使图的直径最长,肯定是尽 ...

  8. hdu 4982 贪心构造序列

    http://acm.hdu.edu.cn/showproblem.php?pid=4982 给定n和k,求一个包含k个不相同正整数的集合,要求元素之和为n,并且其中k-1的元素的和为完全平方数 枚举 ...

  9. Codeforces Round #335 (Div. 2) D. Lazy Student 贪心+构造

    题目链接: http://codeforces.com/contest/606/problem/D D. Lazy Student time limit per test2 secondsmemory ...

随机推荐

  1. django实现密码加密的注册(数据对象插入)

    在 django实现密码非加密的注册(数据对象插入)的基础上,我们对视图和注册页面进行了简单修改 视图 from django.shortcuts import render,redirect,ren ...

  2. Linux源码包安装和脚本安装

    能够先 vi INSTALL 看看安装过程. 1.源码包安装 2.脚本安装

  3. android自定义控件(四)坐标系

    1.局部坐标系(Local Coordinate) 所谓本地坐标系,就是坐标系以物体的中心为坐标原点,物体旋转.平移等操作都是围绕局部坐标系进行的.这时当物体模型进行旋转.平移等操作时, 局部坐标系也 ...

  4. Python基础-高阶函数

    1.高阶函数变量可以指向函数函数的参数可以接收变量一个函数可以接收另一个函数作为参数 def f(n): return n * n def fansik(a, b, func): return fun ...

  5. net-snmp配置文件snmp.conf

    master agentxagentaddress UDP:161sysLocation locationsysContact test@example.comsysName TestsysObjec ...

  6. CSS中input输入框点击时去掉外边框方法【outline:medium;】----CSS学习

    CSS 中添加 outline:medium; JS 控制焦点: $("#CUSTOM_PHONE").focus(function(event){ // this.attr(&q ...

  7. Python进阶(1)_Socket网络编程(基于tcp的socket)

    网络协议参考:http://www.cnblogs.com/hedeyong/p/6889774.html 一.TCP/IP五层模型 学习socket一定要先学习互联网协议: 1.首先:本节课程的目标 ...

  8. pyhton3 os模块

    1 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 2 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd 3 o ...

  9. Cookie用法简介

    java操作Cookie---javax.servlet.http.Cookie 1.增加一个Cookie Cookie cookie = new Cookie("username" ...

  10. 07_Warning $HADOOP_HOME is deprecated.去除办法

    Warning $HADOOP_HOME is deprecated.去除办法 警告的出现: 解决方案: 第一种: 去除[/etc/profile]文件中[export HADOOP_HOME=/op ...