求助
查看原帖
求助
478234
huangboning楼主2024/10/27 22:43

求助,为什么下发的5个样例都过了,在洛谷上交就只有20分?

#include<bits/stdc++.h>
using namespace std;
long long T,n,m,L,V,d[100010],v[100010],a[100010],p[100010],cnt;
struct node{
	long long l,r;
}t[100010];
bool pd[100010];
bool cmp(node a,node b){
	if(a.l==b.l)return a.r<b.r;
	return a.l<b.l;
}
int main()
{
	ios::sync_with_stdio(0);
	cin>>T;
	while(T--){
		cin>>n>>m>>L>>V;
		for(int i=1;i<=n;i++){
			cin>>d[i]>>v[i]>>a[i];
			pd[i]=0;
		}
		for(int i=1;i<=m;i++){
			cin>>p[i];
		}
		cnt=0;
		for(int i=1;i<=n;i++){
			if(d[i]>p[m])continue;
			if(a[i]>=0){
				if(v[i]*v[i]+2*a[i]*(p[m]-d[i])<=V*V)continue;
				int l=1,r=m,mid;
				while(l<r){
					mid=(l+r)/2;
					if(p[mid]>=d[i]&&v[i]*v[i]+2*a[i]*(p[mid]-d[i])>V*V)r=mid;
					else l=mid+1;
				}
				t[++cnt].l=l;
				t[cnt].r=n;
			}
			else{
				int l=1,r=m,mid;
				while(l<r){
					mid=(l+r)/2;
					if(p[mid]>=d[i])r=mid;
					else l=mid+1;
				}
				if(v[i]*v[i]+2*a[i]*(p[l]-d[i])<=V*V)continue;
				int l1=l,r1=m,mid1;
				while(l1<r1){
					mid1=(l1+r1+1)/2;
					if(v[i]*v[i]+2*a[i]*(p[mid1]-d[i])<=V*V)r1=mid1-1;
					else l1=mid1;
				}
				t[++cnt].l=l;
				t[cnt].r=l1;
			}
		}
		cout<<cnt<<" ";
		sort(t+1,t+cnt+1,cmp);
		long long k=-1e9,ans=0;
		for(int i=1;i<=cnt;i++){
			if(t[i].l>k)ans++,k=t[i].r;
			else k=min(k,t[i].r);
		}
		cout<<m-ans<<"\n";
	}
	return 0;
}
2024/10/27 22:43
加载中...