WA on #25 (玄关)
查看原帖
WA on #25 (玄关)
1254703
_hi_楼主2024/7/1 22:01
#include<bits/stdc++.h> 
using namespace std;
long long n,m;
long long mayi1[200005],mayi0[200005];
long long top1,top0;
string s;
int main(){
    scanf("%lld%lld",&n,&m);
    long long sum=0;
    cin>>s;
    s=" "+s;
	for(int i=1;i<=n;i++){
		long long tt;
		scanf(" %lld",&tt);
		if(s[i]=='0')mayi0[++top0]=tt;
		else mayi1[++top1]=tt;
	}
	sort(mayi1+1,mayi1+top1+1);
	sort(mayi0+1,mayi0+top0+1);
	mayi0[++top0]=9e18;
	for(int i=1;i<=top1;i++){
		long long l=1,r=top0;
        long long ans=-1;
		while(l<r){
			long long mid=(l+r+1)/2;
			if(mayi0[mid]-mayi1[i]>2*m){
				r=mid-1;
			}
			else{
                l=mid;
                ans=mid;
            }
		}
        long long ll=0,rr=top0+1;
        while(ll<rr){
			long long mid=(ll+1+rr)/2;
			if(mayi0[mid]>=mayi1[i]){
				rr=mid-1;
			}
			else ll=mid;
		}
		if(ans!=-1 && ans>ll)sum+=ans-ll;
	}
	printf("%lld",sum);
    return 0;
}
2024/7/1 22:01
加载中...