样例没过但AC?
查看原帖
样例没过但AC?
661913
liwenxi1145144444楼主2024/8/23 11:39
#include<bits/stdc++.h>
using namespace std;
string s;
int sma,smb,smc,n,suma[2000005],sumb[2000005],sumc[2000005];
int main(){
	cin>>s;
	n=s.size();
	for(int i=0;i<n;i++){
		sma+=(s[i]=='A');
		smb+=(s[i]=='B');
		smc+=(s[i]=='C');
	}
	s+=s;
	s=" "+s;
	for(int i=1;i<=n+n;i++){
		suma[i]=suma[i-1]+(s[i]=='A');
		sumb[i]=sumb[i-1]+(s[i]=='B');
		sumc[i]=sumc[i-1]+(s[i]=='C');
	}
	int minn=INT_MAX;
	for(int i=1;i<n;i++){
		int ans=0;
		int ab=sumb[i+sma-1]-sumb[i-1];
		int ac=sumc[i+sma-1]-sumc[i-1];
		int ba=suma[i+sma+smb-1]-suma[i+sma-1];
		int bc=sumc[i+sma+smb-1]-sumc[i+sma-1];
		int ca=suma[i+n-1]-suma[i+sma+smb-1];
		int cb=sumb[i+n-1]-sumb[i+sma+smb-1];
		if(ab<=ba){
			ans+=ab+ac;
			ba-=ab;
			ab=0;
			ac-=ca;
			ca=0;
			ba=0;
			bc+=ac;
			ac=0;
			ans+=bc;
		}else{
			ans+=ab+ac;
			ab-=ba;
			ba=0;
			cb+=ab;
			ab=ac=ca=0;
			ans+=cb;
		}
		minn=min(minn,ans);
		ans=0;
		ab=sumb[i+sma-1]-sumb[i-1];
		ac=sumc[i+sma-1]-sumc[i-1];
		ca=suma[i+sma+smc-1]-suma[i+sma-1];
		cb=sumb[i+sma+smc-1]-sumb[i+sma-1];
		ba=suma[i+n-1]-suma[i+sma+smc-1];
		bc=sumc[i+n-1]-sumc[i+sma+smc-1];
		if(ac<=ca){
			ans+=ab+ac;
			ca-=ac;
			ac=0;
			ab-=ba;
			ba=0;
			cb+=ab;
			ab=0;
			ca=0;
			ans+=cb;
		}else{
			ans+=ab+ac;
			ac-=ca;
			ca=0;
			bc+=ac;
			ab=ac=ba=0;
			ans+=bc;
		}
		minn=min(minn,ans);
	}
	cout<<minn;
	return 0;
}
2024/8/23 11:39
加载中...