CodeForces
来源:互联网 发布:剑灵天女高冷捏脸数据 编辑:程序博客网 时间:2024/06/07 19:17
题意:给出string s长度<=1e5, op1:把s的第一个字符移动到t末尾.op2:把t最后一个字符移到u末尾,求u能得到的最小字典序?
思路:
用逆序维护一个数组Min,Min是用来表示其元素后边最小的字符,用Min是用来跟栈顶元素比较,如果栈顶元素小于等于的话就输出栈顶元素,继续用栈顶元素跟Min比较,直到不符合条件为止 。
同时每个字符都在操作结束后入栈。
#include<stdio.h>#include<string.h>#include<stack>#include<algorithm>using namespace std;const int MAXN = 1e5+7;char s[MAXN];int Min[MAXN];int main(){ while(~scanf("%s",&s)) { int n=strlen(s); memset(Min,0,sizeof(Min)); for(int i=n-1;i>=0;i--) { int a=s[i]; if(i==n-1) Min[i]=a; else Min[i]=min(Min[i+1],a);//min只能是两个类型比较 } stack<char>sta; for(int i=0;i<n;i++) { if(sta.empty()) sta.push(s[i]); else { while(!sta.empty()) //这个栈的判断必须写,因为不写就会出现栈顶元素底下的元素比要加入的元素小却没被输出的情况 { char c=sta.top(); if(c<=Min[i]) { printf("%c",c); sta.pop(); } else break; } sta.push(s[i]); } } while(!sta.empty()) { char c=sta.top(); printf("%c",c); sta.pop(); } printf("\n"); }}
阅读全文
0 0
- codeforces~~~
- Codeforces
- codeforces
- Codeforces
- codeforces
- codeforces
- Codeforces
- Codeforces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- CodeForces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- Codeforces
- 区分各种背包【01背包、完全背包、多重背包、2维背包】
- 【luogu1032】字串变换(STL)
- unity协程及典型案例-阿基米德螺旋线
- python安装配置
- 在CMake时添加-ldl等编译选项:TARGET_LINK_LIBRARIES
- CodeForces
- PAT (Basic Level) Practise (中文) 1024. 科学计数法 (20)
- vue 全局组件和局部组件
- 学习笔记
- Null Object 模式
- js导入的三种基本方式
- 夜灵的Html笔记Day01——Html基础
- 闲来无事就开始写排序算法
- git 高级 浅析