80pts,求条,玄关
查看原帖
80pts,求条,玄关
780470
___DIO楼主2024/12/14 21:31
#include<iostream>
#include<cmath>
#include<vector>
#include<cstdio>
#include<algorithm>
#include<bitset>
#include<queue>
using namespace std;
long long n,ans;
long long people[100001];
long long preSum[100001];
double getSum(long long left,long long right) {
	return preSum[right]-preSum[left-1];
}
bool check(int lenth) {
	if(lenth==0)return 1;
	
	for(int i=1,j=lenth; j<=n; i+=1,j+=1) {
		//cout<<i<<" : "<<j<<endl;
		if(getSum(i,j)==double (lenth/2)) {
			return 1;
		}
	}
	return 0;
}
int main() {
	cin>>n;
	people[0]=0;
	preSum[0]=0;
	for(int i=1; i<=n; i++) {
		cin>>people[i];
		preSum[i]=preSum[i-1]+people[i];
	}
	if(n==2){
		if(people[1]+people[2]==1){
			cout<<2<<endl;
			return 0;
		}
		cout<<0<<endl;
		return 0;
	}
	if( getSum(1,n) ==double(n) or getSum(1,n) ==0) {
		cout<<0<<endl;
		return 0;
	}
	long long l=2,r=n,mid;
	//cout<<check(6)<<endl;
	while(l<r) {
		mid=l+(r-l)/2;
		if(mid%2==1) {
			mid-=1;
		}
		if(check(mid)) {
			//cout<<"mid:"<<mid<<"true"<<endl;
			ans=max(ans,mid);
			l=mid+1;
		} else {
			//cout<<"mid:"<<mid<<"false"<<endl;
			r=mid-1;
		}
	}

	cout<<ans<<endl;
	return 0;
}

2024/12/14 21:31
加载中...