50分求条
查看原帖
50分求条
764574
hmy0213楼主2024/10/27 16:12

WA #2#3#4#9#10

#include<bits/stdc++.h> 
using namespace std;
long long t,n,m,len,d[100005],a[100005],p[100005],ans,g,f;
struct node{
	long long be,en;
}jiaoji[100005];
double v[100005],V;
int cmp(node a,node b){
	if(a.en==b.en) return a.be<b.be;
	return a.en<b.en;
}
void check(int i){
	if(a[i]==0){
		if(p[m]<d[i]) return;
		if(v[i]>V){
			ans++;f=1;	
			int l=1,now=0,r=m;
	//		if(p[m]<d[i]) return;
			while(l<=r){
				int mid=(l+r)>>1;
				if(p[mid]>=d[i]){
					now=mid;
					r=mid-1;
				}else l=mid+1;
			}
			jiaoji[++g].be=now;
			jiaoji[g].en=n;
		}
	}else if(a[i]<0){
		int l=1,now=0,r=m;
		if(p[m]<d[i]) return;
		while(l<=r){
			int mid=(l+r)>>1;
			if(p[mid]>=d[i]){
				now=mid;
				r=mid-1;
			}else l=mid+1;
		}
		l=now,r=m;
		double s=p[l]-d[i];
		if(v[i]*v[i]+2*a[i]*s>V*V){
			ans++;
//			g++;
			jiaoji[++g].be=l;
			while(l<=r){
				int mid=(l+r)>>1;
				if(v[i]*v[i]+2*a[i]*(p[mid]-d[i])>V*V){
					now=mid;
					l=mid+1;
				}else r=mid-1;
			}
			jiaoji[g].en=now;
		}
	}else{
		if(p[m]<d[i]) return;
		double s=p[m]-d[i];
		if(v[i]*v[i]+2*a[i]*s>V*V){
			ans++;
			f=1;
			int l=1,now=0,r=m;
	//		if(p[m]<d[i]) return;
			while(l<=r){
				int mid=(l+r)>>1;
				if(p[mid]>=d[i]){
					now=mid;
					r=mid-1;
				}else l=mid+1;
			}
			jiaoji[++g].be=now;
			jiaoji[g].en=m;
		}
	}
}
void slove(){
	for(int i=1;i<=g;i++) jiaoji[i].be=jiaoji[i].en=0;
	ans=f=g=0;
	cin>>n>>m>>len>>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];
	for(int i=1;i<=n;i++){
		check(i);
	}
	cout<<ans<<" ";
//	if(g!=0) cout<<g+f<<endl;
	ans=(g>0);	 
	sort(jiaoji+1,jiaoji+g+1,cmp);
	int x=jiaoji[1].en;
	for(int i=2;i<=g;i++){
//		cout<<jiaoji[i].be<<" "<<jiaoji[i].en<<endl;
		if(jiaoji[i].be>x){
			ans++;
			x=jiaoji[i].en;
		}
	}
//	if(f&&x!=m) ans++;
	cout<<m-ans<<endl;
//	else{
//		cout<<m-1<<endl;
//	}
}
int main(){
//	freopen("detect5.in","r",stdin);
//	freopen("detect.out","w",stdout);
	cin>>t;
	while(t--){
		slove();
	}
//	fclose(stdin);
//	fclose(stdout);
	return 0;
}
/*
1
5 5 15 3
0 3 0
12 4 0
1 1 4
5 5 -2
6 4 -4
2 5 8 9 15
*/
2024/10/27 16:12
加载中...