(求条)如何评价我的代码同学调试无果但是random数据全过不了
  • 板块灌水区
  • 楼主binomial
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/23 17:15
  • 上次更新2024/11/23 19:53:42
查看原帖
(求条)如何评价我的代码同学调试无果但是random数据全过不了
894358
binomial楼主2024/11/23 17:15

RT。

ABC381T5

做法:二分

代码:

#include<bits/stdc++.h>
using namespace std;
const int MAXN=100005;
int n,q,pre[MAXN],suf[MAXN],kc,nowdet,nl,nr,ans,num1,num2,num3[MAXN],len,now;
char s[MAXN];
struct l{
	int l,r;
}p[MAXN];
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>n>>q>>s;
	for(int i=1;i<=n;i++){
		if(s[i-1]=='1'){
			pre[i]=pre[i-1]+1;
		}
		else{
			pre[i]=pre[i-1];
		}
		if(s[i-1]=='/'){
			num3[++len]=i;
		}
	}
	for(int i=n;i>=1;i--){
		if(s[i-1]=='2'){
			suf[i]=suf[i+1]+1;
		}
		else{
			suf[i]=suf[i+1];
		}
	}
	for(int i=1;i<=q;i++){
		cin>>p[i].l>>p[i].r;
	}
	for(int i=1;i<=q;i++){
		ans=0;
		int l=0,r=len,sx=0;
		while(l<=r){
			int mid=(l+r)/2;
			if(pre[num3[mid]]-pre[p[i].l-1]>=suf[num3[mid]]-suf[p[i].r+1]){
				l=mid+1;
			}
			else{
				r=mid-1;
			}
			sx=mid;
		}
		ans=max(max(1+min(pre[num3[sx]]-pre[p[i].l-1],suf[num3[sx]]-suf[p[i].r+1])*2,1+min(pre[num3[sx+1]]-pre[p[i].l-1],suf[num3[sx+1]]-suf[p[i].r+1])*2),1+min(pre[num3[sx-1]]-pre[p[i].l-1],suf[num3[sx-1]]-suf[p[i].r+1])*2);
		if((p[i].l>num3[sx]||p[i].r<num3[sx])&&(p[i].l>num3[sx+1]||p[i].r<num3[sx+1])&&(p[i].l>num3[sx-1]||p[i].r<num3[sx-1])){
			ans=0;
		}
		cout<<ans<<endl;
	}
	return 0;
}
2024/11/23 17:15
加载中...