ASC32 F
题目来源
好吧我也不知道链接
题面
智能前缀算法实验室(Laboratory of Intelligent Prefixes Algorithms, LIPA)正在测试一台前缀反转机(Reversing Prefixes Machine, RPM)。该机器的工作方式如下:输入为一个长度为 n 的字符串 s 和一个序列 1≤\(a_1\)<\(a_2\)<⋯<\(a_k\)≤n
初始时,字符串 s 被放入机器的内部寄存器中。随后,对于每个从1 到 k 的 i,机器取出寄存器中当前字符串的前缀 [1…\(a_i\)] 并将其反转。所有操作完成后,寄存器中的字符串即为机器的输出。
例如,如果机器的输入为
s="abacaba" 且 \(a_1\)=2,\(a_2\)=4则机器的输出为"caababa"。
LIPA 的科学家们希望找出,对于给定的输入字符串s,机器可能输出的字典序最小的字符串是什么。请帮助他们找到这个字符串。
贪心地去想就好了
如果字典序比队首小(等于也可以) 就放队首
否则放队尾
注意
是c-'a'<=q.front()-'a'
而不是c-'a'<q.front()-'a'
好吧我很蠢这一点写错了
点击查看代码
#include<bits/stdc++.h>
#define Elysia return
using namespace std;
typedef long long LL;
const int N=5e5+10;
string s;
deque<char> q;
int main(){
cin>>s;
for(char c:s){
if(q.size()&&c-'a'<=q.front()-'a'){
q.push_front(c);
}
else{
q.push_back(c);
}
}
while(q.size()){
cout<<q.front();
q.pop_front();
}
Elysia 0;
}
/*
abacaba
*/

浙公网安备 33010602011771号