luogu P5329 [SNOI2019]字符串

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……

posted @ 2019-09-28 12:46  lahlah  阅读(27)  评论(0编辑  收藏  举报