求调(悬4关)
  • 板块学术版
  • 楼主focus_costan1
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/4/1 15:25
  • 上次更新2024/4/1 18:40:19
查看原帖
求调(悬4关)
1148600
focus_costan1楼主2024/4/1 15:25

CF1945C

#include<bits/stdc++.h>
using namespace std;
int suma[300005],sumb[300005];
char s[300005];
int main(){
	int t;
	scanf("%d",&t);
	while(t--){
		int n;
		scanf("%d",&n);
		scanf("%s",s);
		for(int i=0;i<n;i++){
			if(s[i]=='0'){
				suma[i+1]=suma[i]+1;
				sumb[i+1]=sumb[i];
			}
			else{
				sumb[i+1]=sumb[i]+1;
				suma[i+1]=suma[i];
			}
		}
		double minn=0x3f3f3f3f;
		int zi=0;
		for(int i=1;i<=n-1;i++){
			if(i==2){
				//cout<<"*((";
			}
			int p=floor(i*1.0/2+0.5);
			int p1=floor((n-i)*1.0/2+0.5);
			//cout<<suma[i]<<" "<<p<<" "<<sumb[n]-sumb[i-1]<<" "<<p1<<endl;
			if(suma[i]>=p&&sumb[n]-sumb[i-1]>=p1){
			//	cout<<"*"<<" "<<i<<endl;
				if(abs(n*1.0/2-i)<minn){
					minn=abs(n*1.0/2-i);
					zi=i;
				}	
			}
		}
		if(sumb[n]>=abs(floor(n*1.0/2+0.5))){
			if(abs(n*1.0/2-0)<minn){
					minn=abs(n*1.0/2-0);
					zi=0;
			}
		}
		if(suma[n]>=abs(floor(n*1.0/2+0.5))){
			if(abs(n*1.0/2-n)<minn){
					minn=abs(n*1.0/2-n);
					zi=n;
			}
		}
		printf("%d\n",zi);
	}
	return 0;
}

样例过了,但是CF第2个点WA了,求调,谢谢。

2024/4/1 15:25
加载中...