tilian
我们发现可以通过交换相邻两个的方式让字典序小的任意移动
我们目标串t
要是t[0]为 c 我们肯定是找到第一个合法的c的位置
每次去找合法并且最优的
那么哪些是不合法的呢 比如我 比c小的 a,b 位置还在第一个c前肯定就不能用了
我们用26个set维护这个过程即可
void solve() {
int n,m;cin>>n>>m;
string s,t;cin>>s>>t;
set<int>st[26];
for(int i=0;i<n;i++){
st[s[i]-'a'].insert(i);
}
for(int i=0;i<m;i++){
int now=t[i]-'a';
if(st[now].size()){
auto it=*st[now].begin();
for(int j=0;j<=now;j++){
while(st[j].size()&&*st[j].begin()<=it){
st[j].erase(st[j].begin());
}
}
}else{ NO return;}
}
YES
}
标签:26,int,Codeforces,cin,Round,910
From: https://www.cnblogs.com/ycllz/p/17847830.html