Codeforces Round #581 (Div. 2) D2. Kirk and a Binary String (hard version)(思维)

题目链接
在这里插入图片描述
在这里插入图片描述
思路:看了一下大佬的方法,真的是惊叹不已呀,O(n)就可以出结果了。。。
想想看把哪些位置的1变为0不会影响LIS呢,其实当某一位为1的时候只要它后面的1的个数大于0的个数的话就不会影响了,所以我们从后往前枚举。

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+1;
char s[maxn];
int main()
{
	scanf("%s",s);
	int len=strlen(s),cnt=0;
	for(int i=len-1;i>=0;--i)
	{
		if(s[i]=='0') cnt++;
		else if(s[i]=='1'&&cnt>0) cnt--;
		else if(s[i]=='1'&&cnt==0) s[i]='0';
	}
	printf("%s\n",s);
}
发布了144 篇原创文章 · 获赞 0 · 访问量 4928

猜你喜欢

转载自blog.csdn.net/qq_42479630/article/details/104545581