CF1837C Best Binary String(普及−) 题解

发布时间 2023-11-25 22:03:40作者: BadBadBad__gqc

题目传送门

题目描述

给定由 1 0 ? 所组成的字符串,你需要用 01 替换 ?

我们将 \(s_l,s_{l+1},\dots,s_r\) 反转称为一次操作。

你要使通过“反转”操作使原字符串成为升序的操作次数尽可能的小。

分析

通过观察,我们可以发现一个规律:

  • \(s_i\)?,且 \(i=0\) 时,\(s_i=0\) 即可;

  • \(s_i\)?,且 \(i\ne 1\) 时,\(s_i=s_{i-1}\) 即可。

有了这条规律,代码也就能很轻松地解决了。

Code:

#include <bits/stdc++.h>
using namespace std;
int mein()
{
	int n;
	cin>>n;
	while(n--)
	{
		string s;
		cin>>s;
		for(int i=0;i<s.size();i++)
		{
			if(s[i]=='?')
			{

				if(i==0)
				{
					s[0]='0';
				}
				else
				{
					s[i]=s[i-1];
				}
			}
		}
		cout<<s<<endl;
	}
	return 0;
}