80WA求调
查看原帖
80WA求调
1420231
yy0707楼主2024/10/27 15:07
#include<bits/stdc++.h>
using namespace std;
int T,n,m,ans1,ans2;
double L,V,d[100001],v[100001],a[100001],p[100001];
struct node{int a=0,b=0;}s[100001];
int read(){
	int x=0,f=0;char c=cin.get();
	for(;!isdigit(c);c=cin.get())if(c=='-')f=1;
	for(;isdigit(c);c=cin.get())x=(x<<1)+(x<<3)+c-'0';
	return f?-x:x;
}int main(){
	T=read();
	while(T--){
		n=read();m=read();L=read();V=read();
		memset(s,0,sizeof(s));ans1=0;ans2=m;
		for(int i=1;i<=n;i++)d[i]=read(),v[i]=read(),a[i]=read();
		for(int i=1;i<=m;i++)p[i]=read();
		for(int i=1;i<=n;i++){
			if(v[i]>V&&a[i]>=0){
				s[i].a=lower_bound(p+1,p+m+1,d[i])-p;
				s[i].b=m;
			}else if(a[i]>0){
				double dis=d[i]+(V*V-v[i]*v[i])/(2*a[i]);
				s[i].a=upper_bound(p+1,p+m+1,dis)-p;
				s[i].b=m;
			}else if(a[i]<0&&v[i]>V){
				double dis=d[i]+(V*V-v[i]*v[i])/(2*a[i]);
				s[i].a=lower_bound(p+1,p+m+1,d[i])-p;
				s[i].b=upper_bound(p+1,p+m+1,dis)-p-1;
			}if(s[i].a>s[i].b)s[i].a=s[i].b=0;
			if(s[i].a&&s[i].b)ans1++;
		}sort(s+1,s+n+1,[](node a,node b){return a.a!=b.a?a.a>b.a:a.b>b.b;});
		sort(s+1,s+ans1+1,[](node a,node b){return a.a!=b.a?a.a<b.a:a.b<b.b;});
		for(int i=1;i<=ans1;i++){
			int j=i+1,l=s[i].a,r=s[i].b;
			for(;j<=ans1;j++){
				if(max(l,s[j].a)<=min(r,s[j].b)){
					l=max(l,s[j].a);r=min(r,s[j].b);
				}else break;
			}j--;i=j;ans2--;
		}cout<<ans1<<' '<<ans2<<'\n';
	}
}

所有样例都A了

2024/10/27 15:07
加载中...