luogu P5329 [SNOI2019]字符串
发现可以先把连续相同的一段压缩成一个字母
然后就变成了任意两个相邻字符不相同的情况
对于相邻的直接分类讨论
如果当前的字符大于下一个字符,那么删掉这个一定比删掉下一个要优
反过来同理
然后就可以dfs来输出
具体看代码吧
code:
#include<bits/stdc++.h>
#define N 3000005
using namespace std;
char st[N];
int gs[N], n, sz;
void dfs(int x){
int F = 0;
if(st[gs[x]] > st[gs[x + 1]]){
F = 1;
for(int i = gs[x]; i < gs[x + 1]; i ++) printf("%d ", i);
}
if(x == sz) return;
dfs(x + 1);
if(!F) for(int i = gs[x]; i < gs[x + 1]; i ++) printf("%d ", i);
}
int main(){
scanf("%d", &n);
scanf("%s", st + 1);
for(int i = 1; i <= n; i ++){
if(st[i] == st[i - 1]) continue;
gs[++ sz] = i;
}
gs[++ sz] = n + 1;
dfs(1);
return 0;
}
智力康复中 loading……