WA70pts,悬关求调
查看原帖
WA70pts,悬关求调
933096
huhengrui2013楼主2025/8/31 16:04

WA on #6,#8,#10

#include<bits/stdc++.h>
using namespace std;

const int N=1e5+10;
int d[N],v[N],n,m,L,V;
int p[N];
int a[N];
int f(int V,int x,int y){
	return (V*V-x*x)/(2*y);
}
struct P{
	int l,r;
}x[N];
bool cmp(P x,P y){
	return x.r<y.r;
}

int erfen(int m,int x){
	int h=1,w=m,ans=0;
	while(h<=w){
		int mid=(h+w)/2;
		if(p[mid]<=x) {
			ans=mid;
			h=mid+1;
		}else w=mid-1;
	}
	return ans;
}
void solve(){
	for(int i=0;i<N;i++) d[i]=v[i]=a[i]=x[i].l=x[i].r=p[i]=0;
	cin>>n>>m>>L>>V;
	for(int i=1;i<=n;i++) cin>>d[i]>>v[i]>>a[i];
	for(int i=1;i<=m;i++) cin>>p[i];	
	sort(p+1,p+1+m);
	for(int i=1;i<=n;i++) {
		if(a[i]<0){
			if(v[i]<=V) x[i].l=x[i].r=-1;
			else{
				x[i].l=d[i];
				x[i].r=min(L,d[i]+f(V,v[i],a[i]));
			}
		}
		else if(a[i]==0){
			if(v[i]<=V) x[i].l=x[i].r=-1;
			else{
				x[i].l=d[i];
				x[i].r=L;
			}
		}
		else if(a[i]>0) {
			if(v[i]<=V){
				x[i].l=min(L,d[i]+f(V,v[i],a[i])+1);
				x[i].r=L;
			}else{
				x[i].l=d[i];
				x[i].r=L;
			}
		}
	}
	
	sort(x+1,x+1+n,cmp);
	int lst=0,sum=0,ans=0;
	for(int i=1;i<=n;i++) {
		if(x[i].l==-1&&x[i].r==-1) continue;
		int k=erfen(m,x[i].r);
		//cout<<x[i].l<<" "<<x[i].r<<" "<<k<<" "<<p[k]<<endl;
		if(p[k]>=x[i].l&&p[k]<=x[i].r){
			sum++;
			if(!(lst>=x[i].l&&lst<=x[i].r)){
				ans++;
				lst=p[k];
			}
		}
	}
	cout<<sum<<" "<<m-ans<<'\n';
	ans=sum=lst=0;
	n=m=0;
	
	return ;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	while(t--) solve();
}```
2025/8/31 16:04
加载中...