Why wa on 01_random_04.txt求调悬2关
查看原帖
Why wa on 01_random_04.txt求调悬2关
1063855
xu_zhihao楼主2025/2/8 13:12
#include<bits/stdc++.h>
using namespace std;
int l;
string s;
int n;
int y;
int find(int l,int r){
	//cout<<-1;
	//cout<<l<<" "<<r<<" "<<y<<endl; 
	if(r-l+1==3){
		int a=0,b=0;
		for(int i=l;i<=r;i++){
			if(s[i]=='0'){
				a++;
			}
			else{
				b++;
			}
		}
		//cout<<l<<" "<<r<<endl;
		if(a==3){
			y=0;
			return 2;
		}
		else if(a==2){
			y=0;
			return 1;
		}
		else if(b==2){
			y=1;
			return 1;//返回花费 
	    }
	    else{
	    	y=1;
	    	return 2;
		}
	}
	int mid=(r-l+1)/3;
	int e[3];
	e[0]=find(l,l+mid-1);
	int p[3];
	p[0]=y;
	e[1]=find(l+mid,l+2*mid-1);
	p[1]=y;
	e[2]=find(l+2*mid,r);
	p[2]=y;
	//cout<<l<<" "<<r<<endl<<p[0]<<" "<<p[1]<<" "<<p[2]<<endl;
	int L=0,R=0;
	for(int i=0;i<3;i++){
		if(!p[i]){
			L++;
		}
		else{
			R++;
		}
	}
	if(L==2){
		y=0;
		int mn=1e9;
		for(int i=0;i<3;i++){
			if(!p[i]){
				mn=min(mn,e[i]);
			}
		}
		return mn;
	}
	else if(R==2){
		y=1;
		int mn=1e9;
		for(int i=0;i<3;i++){
			if(p[i]){
				mn=min(mn,e[i]);
			}
		}
		return mn;
	}
	else if(L==3){
		y=0;
		int mn1=1e9,mn2=1e9;
		for(int i=0;i<3;i++){
			if(!p[i]){
				if(mn1!=1e9){
					mn2=min(mn2,mn1);
				}
				mn1=min(mn1,e[i]);
			}
		}
		return mn1+mn2;
	}
	else if(R==3){
		y=1;
		int mn1=1e9,mn2=1e9;
		for(int i=0;i<3;i++){
			if(p[i]){
				if(mn1!=1e9){
					mn2=min(mn2,mn1);
				}
				mn1=min(mn1,e[i]);
			}
		}
		return mn1+mn2;
	}
}
int main(){
	cin>>n;
	cin>>s;
	l=s.size();
	int kk=find(0,l-1);
	cout<<kk;
	return 0;
}
2025/2/8 13:12
加载中...