80pts WA on #5,6求条
查看原帖
80pts WA on #5,6求条
752977
yuzhongbutong123楼主2024/11/9 19:39

rt
记录

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

const int N=1e6+100;

int D,vm,A;

int p[N];

int n,m,L,V,T;

struct Node
{
	int l,r;
	
	bool vis;
}ling[N];

bool vis[N];

int check(int num)
{
	int l=0,r=m;
	while(l<r)
	{
		int mid=(l+r)/2;
		if(p[mid]>=num)
			r=mid;
		else
			l=mid+1;
	}
	return p[l];
}

int check2(int num)
{
	int l=0,r=m;
	while(l<r)
	{
		int mid=(l+r+1)/2;
		if(p[mid]<=num)
			l=mid;
		else
			r=mid-1;
	}
	return p[l];
}

bool cmp(Node a,Node b)
{
	return a.r<b.r;
}

int main()
{
//	freopen("detect3.in","r",stdin);
//	freopen("detect.out","w",stdout);
	cin>>T;
	while(T--)
	{
		int ans=0,sum=0;
		for(int i=1;i<=n;i++)
			ling[i].vis=0;
		cin>>n>>m>>L>>V;
		for(int i=1;i<=n;i++)
		{
			cin>>D>>vm>>A;
			if(A>0)
			{
				ling[i].l=1.0*((V*V-vm*vm)/(1.0*2*A))+D+1;
				ling[i].r=L;
				ling[i].vis=1;
			}
			else if(A<0)
			{
				if(vm>V)
				{
					ling[i].l=1.0*D;
					ling[i].r=min(1.0*L,1.0*((V*V-vm*vm)/(1.0*2*A))+D-0.000001);
					ling[i].vis=1;
				}
			}
			else
			{
				if(vm>V)
				{
					ling[i].l=1.0*D;
					ling[i].r=1.0*L;
					ling[i].vis=1;
				}
			}
			if(ling[i].l>ling[i].r)
				ling[i].vis=0;
		}
		for(int i=1;i<=m;i++)
			cin>>p[i];
		sort(p+1,p+1+m);
		for(int i=1;i<=n;i++)
		{
			if(ling[i].vis==0)
				continue;
			int k=check(ling[i].l); 
			if(k>=ling[i].l&&k<=ling[i].r)
				ans++;
			else
				ling[i].vis=0;
		}
		sort(ling+1,ling+1+n,cmp);
		int tp=0;
		for(int i=1;i<=n;i++)
		{
			if(ling[i].vis==0)
				continue;
			if(tp>=ling[i].l&&tp<=ling[i].r)
				continue;
			else
			{
				tp=check2(ling[i].r);
				sum++;
			}
		}
		cout<<ans<<" "<<m-sum<<endl;
	}
	return 0;
}
2024/11/9 19:39
加载中...