Kai’blog

主博客 | 势利纷华,近之而不染者洁,不近者亦洁,君子不立危墙之下。

cf1809D-1900-66min

重点在于看出来操作1至多执行一次,之后就很容易了 ,加上一些预处理的小优化就能过,就是代码逻辑比较复杂,对coding能力有一些要求

 

#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <list>
#define int long long
using namespace std;
string s;
int ans;
int count1[1000005],count0[1000005];

void solution()
{
	cin>>s;
	//cout<<s;
	ans=10e17;
	for(int i=0;i<=s.size()-1;i++)
	{
		if(s[i]=='1')
		{
			if(i>0)count1[i]=count1[i-1]+1;
			else count1[i]=1;
		}
		else
		{
			if(i>0)count1[i]=count1[i-1];
			else count1[i]=0;
		}
	}
	for(int i=s.size()-1;i>=0;i--)
	{
		if(s[i]=='0')
		{
			if(i<s.size()-1)count0[i]=count0[i+1]+1;
			else count0[i]=1;
		}
		else
		{
			if(i<s.size()-1)count0[i]=count0[i+1];
			else count0[i]=0;
		}
	}
	for(int i=0;i<=(int)(s.size())-2;i++)
	{
		int count=0;
		if(s[i]=='1'&&s[i+1]=='0')
		{
			// for(int j=i-1;j>=0;j--)
			// {
			// 	if(s[j]=='1')count++;
			// }
			// for(int j=i+2;j<s.size();j++)
			// {
			// 	if(s[j]=='0')count++;
			// }
			int c1,c2;
			if(i-1>=0)c1=count1[i-1];
			else c1=0;
			if(i+2<=s.size()-1)c2=count0[i+2];
			else c2=0;
			count=c1+c2;
			ans=min(ans,(int)((count+1)*10e11+count));
		}
		else
		{
			// for(int j=i-1;j>=0;j--)
			// {
			// 	if(s[j]=='1')count++;
			// }
			// for(int j=i+2;j<s.size();j++)
			// {
			// 	if(s[j]=='0')count++;
			// }
			int c1,c2;
			if(i-1>=0)c1=count1[i-1];
			else c1=0;
			if(i+2<=s.size()-1)c2=count0[i+2];
			else c2=0;
			count=c1+c2;
			//cout<<count1[i-1]<<' '<<count0[i+2]<<' '<<ans<<endl<<endl<<endl;
			ans=min(ans,(int)(count*10e11+count));
		}
		//cout<<i<<' '<<ans<<endl;
		//cout<<i<<' '<<s.size()-2<<endl;
	}
	int flag=1;
	for(int i=1;i<=s.size()-1;i++)
	{
		if(s[i]!=s[i-1])
		{
			flag=0;
			break;
		}
	}
	if(flag==1)ans=0;
	cout<<ans<<endl;//<<endl<<endl;

}

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);cout.tie(0);
	int T;
	cin>>T;
	while(T--)
		solution();
	return 0;
}

 

posted @ 2024-07-19 18:53  Kai-G  阅读(3)  评论(0编辑  收藏  举报
Copyright © 2019-2020 拱垲. All rights reserved.