[cf797c]Minimal string(贪心+模拟)
题意:
给出了字符串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(贪心+模拟)的更多相关文章
- CodeForce-797C Minimal string(贪心模拟)
Minimal string CodeForces - 797C Petya 收到一个长度不超过 105 的字符串 s.他拿了两个额外的空字符串 t 和 u 并决定玩一个游戏.这个游戏有两种合法操作: ...
- 贪心+模拟 Codeforces Round #288 (Div. 2) C. Anya and Ghosts
题目传送门 /* 贪心 + 模拟:首先,如果蜡烛的燃烧时间小于最少需要点燃的蜡烛数一定是-1(蜡烛是1秒点一支), num[g[i]]记录每个鬼访问时已点燃的蜡烛数,若不够,tmp为还需要的蜡烛数, ...
- 贪心+模拟 ZOJ 3829 Known Notation
题目传送门 /* 题意:一串字符串,问要最少操作数使得成为合法的后缀表达式 贪心+模拟:数字个数 >= *个数+1 所以若数字少了先补上在前面,然后把不合法的*和最后的数字交换,记录次数 岛娘的 ...
- CodeForces ---596B--Wilbur and Array(贪心模拟)
Wilbur and Array Time Limit: 2000MS Memory Limit: 262144KB 64bit IO Format: %I64d & %I64u Su ...
- Minimal string CodeForces – 797C
题目链接 题目难度: 1700rating 题目类型:string+贪心+STL 题目思路: 由于题目要求的最终结果是字典序最小的那个字符串,那么我们从贪心的从’a’开始查找字符串里是否存在,如果存在 ...
- Codeforces 797C - Minimal string
C. Minimal string 题目链接:http://codeforces.com/problemset/problem/797/C time limit per test 1 second m ...
- Minimal string CodeForces - 797C
Minimal string CodeForces - 797C 题意:有一个字符串s和空串t和u,每次操作可以将s的第一个字符取出并删除然后放到t的最后,或者将t的最后一个字符取出并删除然后放到u的 ...
- CodeForces 797C Minimal string:贪心+模拟
题目链接:http://codeforces.com/problemset/problem/797/C 题意: 给你一个非空字符串s,空字符串t和u.有两种操作:(1)把s的首字符取出并添加到t的末尾 ...
- Minimal string 栈 贪心
time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...
随机推荐
- 【转】iOS安全之RSA加密/生成公钥、秘钥 pem文件
在iOS中使用RSA加密解密,需要用到.der和.p12后缀格式的文件,其中.der格式的文件存放的是公钥(Public key)用于加密,.p12格式的文件存放的是私钥(Private key)用于 ...
- 仿易讯clientloading效果
以下来实现一个loading效果.详细效果例如以下: 首先对这个效果进行拆分,它由以下部分组成: 1 一个"闪电"样式的图案. 2 "闪电"图案背后是一个圆角矩 ...
- activemq 安装-单点
一,准备工作:首先安装jdk1.7及其以上版本,此环境安装的是jdk-1.8 二.搭建activemq 环境: 192.168.9.25 centos6.5 ...
- 九度OJ 1006:ZOJ问题 (递归)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:18621 解决:3197 题目描述: 对给定的字符串(只包含'z','o','j'三种字符),判断他是否能AC. 是否AC的规则如下: 1. ...
- Mac下下载 mysql8.0
终端输入一下的命令,将文件下载下来 wget --header="Cookie:MySQL_S=u1ddsnr95sraoqjcu4og46ojrcapim37; MyGUID=59f3a5 ...
- viewport详解
本文主要讲解viewpor相关知识. 参考资料&内容来源 博客园:https://www.cnblogs.com/zaoa/p/8630393.html 博客园:http://www.cnbl ...
- 【剑指Offer学习】【面试题33:把数组排成最小的数】
题目:输入一个正整数数组,把数组里全部数字拼接起来排成一个数.打印能拼接出的全部数字中最小的一个. 样例说明: 比如输入数组{3. 32, 321},则扫描输出这3 个数字能排成的最小数字321323 ...
- iOS Dev (53) 修复UIImagePickerController偷换StatusBar颜色的问题
版权声明:本文为 CSDN 博主 大锐哥(ID 为 prevention)原创文章,未经博主同意不得转载. https://blog.csdn.net/prevention/article/detai ...
- 【ELK】ELK5.3搭建过程遇到的问题
elasticsearch 5.3 安装过程中遇到了一些问题,这里简单记录一下 . 问题一:警告提示 [2016-11-06T16:27:21,712][WARN ][o.e.b.JNANatives ...
- PAT 乙级 1085. PAT单位排行 (25) 【结构体排序】
题目链接 https://www.patest.cn/contests/pat-b-practise/1085 思路 结构体排序 要注意几个点 它的加权总分 是 取其整数部分 也就是 要 向下取整 然 ...