首页 > 代码库 > CodeForce-797C Minimal string(贪心模拟)
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(贪心模拟)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。