[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 ...
随机推荐
- Android-解决Fail to post notification on channel "null"的方法
原文:https://blog.csdn.net/weixin_40604111/article/details/78674563 在sdk版本为25或25之前想在notification中添加一个点 ...
- Android 实现的EditText响应drawableRight的点击事件
1.自定义Edittext 实现右侧图标点击清空 package com.dxw.live.view; import android.content.Context; import android.g ...
- Java泛型【转】
一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: public class GenericTest { public static void main(String[] a ...
- 【oracle案例】ORA-01102: cannot mount database in EXCLUSIVE mode
ORA-01102: cannot mount database in EXCLUSIVE mode 今天在fedora上安装完10g后,测试数据库是否安装成功.STARTUP数据库时,发生如下错误: ...
- hadoop 小文件 挂载 小文件对NameNode的内存消耗 HDFS小文件解决方案 客户端 自身机制 HDFS把块默认复制3次至3个不同节点。
hadoop不支持传统文件系统的挂载,使得流式数据装进hadoop变得复杂. hadoo中,文件只是目录项存在:在文件关闭前,其长度一直显示为0:如果在一段时间内将数据写到文件却没有将其关闭,则若网络 ...
- HDFS relaxes a few POSIX requirements to enable streaming access to file system data
https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html Introduction [ ...
- 【模板】P3806点分治1
[模板]P3806 [模板]点分治1 很好的一道模板题,很无脑经典. 讲讲淀粉质吧,很营养,实际上,点分治是树上的分治算法.根据树的特性,树上两点的路径只有一下两种情况: 路径经过根\((*)\) 路 ...
- 关于Wix的源代码
Wix的源代码有两种方式可以获得,以3.8为例: 在Release的页面下载wix38-debug.zip 通过SourceCode页面下载,http://wix.codeplex.com/Sourc ...
- 关于TensorFlow若干问题的汇总
1.TensorFlow中padding的两种类型SAME和VALID 简而言之:padding='SAME'表示采用在两端填充0进行补全的方式,左右填充0的个数可能并不同. padding='VAL ...
- Android中m、mm、mmm、mma、mmma的区别
m:编译整个安卓系统 makes from the top of the tree mm:编译当前目录下的模块,当前目录下需要有Android.mk这个makefile文件,否则就往上找最近的Andr ...