B. Subsequence Hate1400 / 贪心

Posted 幽殇默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了B. Subsequence Hate1400 / 贪心相关的知识,希望对你有一定的参考价值。


https://codeforces.com/problemset/problem/1363/B
通过分析只能变成一下几种情况:

  • 000000
  • 1111111
  • 000001111
  • 1111100

其实00000和11111在上面两个中包含了,不过这样更清晰一点。
用前缀和来维护一段区间有多少个1.

#include<bits/stdc++.h>
using namespace std;
int solve(string s)
{
	int cnt1=0;
	for(int i=0;i<s.size();i++) if(s[i]=='0') cnt1++;//全1
	int cnt2=0;
	for(int i=0;i<s.size();i++) if(s[i]=='1') cnt2++;//全0
	
	int ss[1005]={0};//前缀和
	s="*"+s;
	for(int i=1;i<s.size();i++)
	{
		if(s[i]=='1') ss[i]=ss[i-1]+1;
		else ss[i]=ss[i-1];
	}
	int cnt3=1e9;//0001111 
	int n=s.size()-1;
	for(int i=1;i<s.size();i++)
	{
		int len1=ss[i];
		int len2=(n-i)-(ss[n]-ss[i]);
		cnt3=min(cnt3,len1+len2);
	}
	int cnt4=1e9;//111000 
	for(int i=1;i<s.size();i++)
	{
		int len1=i-ss[i];
		int len2=ss[n]-ss[i];
		cnt4=min(cnt4,len1+len2);
	}
	return min({cnt1,cnt2,cnt3,cnt4});
}
int main(void) 
{
	int t; cin>>t;
	while(t--)
	{
		string s; cin>>s;
		cout<<solve(s)<<endl;
	}
	return 0;
}

以上是关于B. Subsequence Hate1400 / 贪心的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #723 (Div. 2)B. I Hate 1111

Codeforces Round #723 (Div. 2)B. I Hate 1111(完全背包)

Codeforces Round #723 (Div. 2) B. I Hate 1111(找规律,性质)

B. Most socially-distanced subsequence1200 / 思维 贪心 常见模型

B. Most socially-distanced subsequence1200 / 思维 贪心 常见模型

Codeforces Round #649 (Div. 2) B. Most socially-distanced subsequence