题意:

给出了字符串s的内容,字符串t,u初始默认为空,允许做两种操作:

1、把s字符串第一个字符转移到t字符串最后

2、把t字符串最后一个字符转移到u字符串最后

最后要求s、t字符串都为空,问u字符串字典序最小能是多少。

解题关键:

主要就是贪心,按字典序,每贪心完一个字母,往前回溯一次。

1、hash一下每个字母出现的次数,然后贪心选择字典序最小的即可。

2、预处理每个位置能达到的最小的字母,然后贪心。tmp一定是一个单调不减的数组。

3、小于等于而不是等于的原因是abacd这种情况。

反思:

1、这种看似简单的模拟题一定要搞明白,自己写一下。类似于栈混洗。

2、string的这种类似java和python的用法

法1:

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
stack<char>s1;
int m1[];
int cnt=;
char s2[];
int main(){
string s;
int nn=;
cin>>s;
for(int i=;s[i];i++) m1[s[i]-'a']++;
while(!m1[nn]&&nn<)nn++;
for(int i=;s[i];i++){
if(s1.empty()||m1[nn]){
s1.push(s[i]);
m1[s[i]-'a']--;
}
while(!s1.empty()&&s1.top()<=nn+'a'){//改成小于等于就过了
s2[cnt++]=s1.top(),s1.pop();
while(!m1[nn]&&nn<)nn++;
}
while(!m1[nn]&&nn<)nn++;
}
while(!s1.empty()) s2[cnt++]=s1.top(),s1.pop();
printf("%s\n",s2);
}

法二:

 #include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
stack<char>ss;
char tmp[],x;
int main(){
string s;
cin>>s;
x='z'+;
for(int i=s.size()-;i>=;i--) x=min(x,s[i]),tmp[i]=x;//tmp[i]代表该位置能使结果到达最小的值
string ans="";
for(int i=;i<s.size();i++){
while(!ss.empty()&&ss.top()<=tmp[i]) ans+=ss.top(),ss.pop();
ss.push(s[i]);
}
while(!ss.empty()) ans+=ss.top(),ss.pop();
cout<<ans<<"\n";
return ;
}

[cf797c]Minimal string(贪心+模拟)的更多相关文章

  1. CodeForce-797C Minimal string(贪心模拟)

    Minimal string CodeForces - 797C Petya 收到一个长度不超过 105 的字符串 s.他拿了两个额外的空字符串 t 和 u 并决定玩一个游戏.这个游戏有两种合法操作: ...

  2. 贪心+模拟 Codeforces Round #288 (Div. 2) C. Anya and Ghosts

    题目传送门 /* 贪心 + 模拟:首先,如果蜡烛的燃烧时间小于最少需要点燃的蜡烛数一定是-1(蜡烛是1秒点一支), num[g[i]]记录每个鬼访问时已点燃的蜡烛数,若不够,tmp为还需要的蜡烛数, ...

  3. 贪心+模拟 ZOJ 3829 Known Notation

    题目传送门 /* 题意:一串字符串,问要最少操作数使得成为合法的后缀表达式 贪心+模拟:数字个数 >= *个数+1 所以若数字少了先补上在前面,然后把不合法的*和最后的数字交换,记录次数 岛娘的 ...

  4. CodeForces ---596B--Wilbur and Array(贪心模拟)

    Wilbur and Array Time Limit: 2000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Su ...

  5. Minimal string CodeForces – 797C

    题目链接 题目难度: 1700rating 题目类型:string+贪心+STL 题目思路: 由于题目要求的最终结果是字典序最小的那个字符串,那么我们从贪心的从’a’开始查找字符串里是否存在,如果存在 ...

  6. Codeforces 797C - Minimal string

    C. Minimal string 题目链接:http://codeforces.com/problemset/problem/797/C time limit per test 1 second m ...

  7. Minimal string CodeForces - 797C

    Minimal string CodeForces - 797C 题意:有一个字符串s和空串t和u,每次操作可以将s的第一个字符取出并删除然后放到t的最后,或者将t的最后一个字符取出并删除然后放到u的 ...

  8. CodeForces 797C Minimal string:贪心+模拟

    题目链接:http://codeforces.com/problemset/problem/797/C 题意: 给你一个非空字符串s,空字符串t和u.有两种操作:(1)把s的首字符取出并添加到t的末尾 ...

  9. Minimal string 栈 贪心

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

随机推荐

  1. JS常用方法手记

    1.判断arr数组是否含有元素str,没有返回-1 arr.indexOf(str) 2.遍历arr数组,k为键,v为值 arr.map((v, k) => { return;}) 3.arr数 ...

  2. VMware 报错“Intel VT-x处于禁止状态”

    VMware Workstation 10虚拟机安装64位windows server 2008 R2系统时报错“Intel VT-x处于禁止状态”,如下图.   工具/原料   VMware Wor ...

  3. sql 时间转换格式

    convert(varchar(10),字段名,转换格式) CONVERT(nvarchar(10),count_time,121)CONVERT为日期转换函数,一般就是在时间类型(datetime, ...

  4. Fragment 懒加载

    我们在遇到Activity嵌套Fragment的时候经常会遇到多个Fragment页面同时加载数据,一开始的时候就初始化很多页面,有的甚至进入页面的时候,会造成缓慢的现象,下面我们就针对这个问题做一下 ...

  5. _THROW 何解?

    在看/usr/include/........中.h头文件对函数接口的定义时,总是能看到在函数结尾加一个_THROW,一时不明白这是什么意思,而且对于有些POSIX和ISO C不承认或未明确的定义的函 ...

  6. 安装配置Django

    安装配置Django 以下是基于python3.5 pip install Django 把python环境目录Scripts配置到环境变量,主要在命令行中随时可以使用django-admin 验证 ...

  7. 使用T4模板技术

    1.右键->添加->新建项,选择“文本模板” 2.修改代码为: <#@ template debug="false" hostspecific="fal ...

  8. meaven环境变量配置

    首先,先到官网去下载maven.这里是官网的地址:http://maven.apache.org/download.cgi  请选择最新的版本下载,这里咱们下载的是apache-maven-3.1.1 ...

  9. 九度OJ 1149:子串计算 (计数、排序)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:1026 解决:571 题目描述: 给出一个01字符串(长度不超过100),求其每一个子串出现的次数. 输入: 输入包含多行,每行一个字符串. ...

  10. java基础语言 运算符

    /* ++,--运算符的使用: 单独使用: 放在操作数的前面和后面效果一样.(这种用法是我们比较常见的) 参与运算使用: 放在操作数的前面,先自增或者自减,然后再参与运算. 放在操作数的后面,先参与运 ...