题意:

给出了字符串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. Android-自定义广播不能用的可能的原因(sendbroadcast 不起效果)

    参考博客:https://blog.csdn.net/chuyouyinghe/article/details/79424373 照着书上的源码将程序原封不动敲了一遍,但发现这特么怎么也收不到发出的广 ...

  2. Cannot create __weak reference in file using manual reference counting

    Xcode更新到7.3后会出现NSObject+MJProperty.h报Cannot create __weak reference in file using manual reference c ...

  3. 仿易讯clientloading效果

    以下来实现一个loading效果.详细效果例如以下: 首先对这个效果进行拆分,它由以下部分组成: 1 一个"闪电"样式的图案. 2 "闪电"图案背后是一个圆角矩 ...

  4. spring AOP(切面) 表达式介绍

    在 spring AOP(切面) 例子基础上对表达式进行介绍 1.添加接口删除方法 2.接口实现类 UserDaoServer 添加实现接口删除方法 3.测试类调用delUser方法 4. 输出结果截 ...

  5. C# 串口发送 陷阱,必须知道的坑

    目的:间隔100毫秒持续发送指令 由于 C#串口发送为同步方式发送,发送占用时间较长,导致发送变慢, 自己写工具并手工测试两种波特率发送占用时长如下

  6. Unix环境高级编程—进程控制(三)

    一.解释器文件 解释器文件属于文本文件,起始行形式为: #! pathname[optional-argument] 我们创建一个只有一行的文件如下: #!/home/webber/test/echo ...

  7. zendstudio 13.0

    官网原版下载 http://downloads.zend.com/studio-eclipse/13.0.0/ZendStudio-13.0.0-win32.win32.x86.exe 破解补丁: 链 ...

  8. 【题解】Painting Fence

    [题解]Painting Fence 分治模板.贪心加分治.直接\(O(n^2logn)\)分治过去.考虑一块联通的柱形是子问题的,是递归的,贪心分治就可.记得对\(r-l+1\)取\(min\). ...

  9. 洛谷 2261 [CQOI2007]余数求和

    题目戳这里 一句话题意 求 \(\sum_{i=1}^{n} (k ~~\texttt{mod} ~~i)\) Solution 30分做法: 说实话并不知道怎么办. 60分做法: 很明显直接一遍o( ...

  10. centos 7 官网安装 PostgreSQL

    https://www.postgresql.org/download/linux/redhat/