CodeForce-797C Minimal string(贪心模拟)
Posted Ying_zx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForce-797C Minimal string(贪心模拟)相关的知识,希望对你有一定的参考价值。
Minimal string
CodeForces - 797CPetya 收到一个长度不超过 105 的字符串 s。他拿了两个额外的空字符串 t 和 u 并决定玩一个游戏。这个游戏有两种合法操作:
- 将 s 串的第一个字符移动到字符串 t 的末尾。
- 将 t 串的最后一个字符移动到字符串 u 的末尾。
Petya 希望将 s 和 t 都变为空串并且使得串 u 字典序最小。
你需要写一个代码求出最小的字典序。
Input
第一行包含一个非空串 s (1?≤?|s|?≤?105),只包含小写字母。
输出串 u.
保存每个字符的出现次数 当前位置可以填入的字符要么为当前栈顶 若有比栈顶还小的字符 则找到该字符即可
#include <bits/stdc++.h> using namespace std; const int N = 2e6 + 20; string s, t, u, a; int b[30]; int pos[30]; int h[N]; stack<char> sta; int main() { while (cin >> s) { int len = s.length(); memset(b, 0, sizeof(b)); for (int i = 0; s[i]; i++) b[s[i] - ‘a‘]++; int i = 0, k; while (s[i]) { int k1 = 26; if (!sta.empty()) k1 = sta.top() - ‘a‘; for (k = 0; k < 26; k++) { if (b[k]) break; } k = min(k1, k); while (true) { if (!sta.empty() && sta.top() - ‘a‘ == k) break; b[s[i] - ‘a‘]--; sta.push(s[i++]); if (s[i] == ‘\0‘) break; } if (!sta.empty()) { printf("%c", sta.top()); sta.pop(); } } while (!sta.empty()) { char c = sta.top(); sta.pop(); printf("%c", c); } cout << endl; } return 0; }
以上是关于CodeForce-797C Minimal string(贪心模拟)的主要内容,如果未能解决你的问题,请参考以下文章
Ural 1303 Minimal Coverage(贪心)
vmware安装minimal centos报错/etc/rc5.d/s99local : line:25 : eject : command not found
HDU-2489 Minimal Ratio Tree(最小生成树)
HDU 2489 Minimal Ratio Tree(prim+DFS)