求调wa on #8 #10
查看原帖
求调wa on #8 #10
733734
yanxu_cn楼主2024/10/27 20:51
#include<bits/stdc++.h>
using namespace std;
#define int long long
struct spd
{
	int l,r;
	bool flag;
	const bool operator<(const spd sd)const
	{
//		if(flag==false)return false;
//		if(sd.flag==false)return true;
		if(r<sd.r)return true;
		return false;
	}
}arr[100007];
int moni[100007];
signed main()
{
	#ifndef ONLINE_JUDGE
	freopen("detect4.in","r",stdin);
	freopen("d.out","w",stdout);
	#endif
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int T;
	cin>>T;
	while(T--)
	{
		int n,m,L,V,d,v,a;
		cin>>n>>m>>L>>V;
		vector<int>vc;
		for(int i=0;i<n;i++)
		{
			cin>>d>>v>>a;
			if(a==0)
			{
				if(v<=V)arr[i]=spd{-1,-1,false};
				else arr[i]=spd{d,L,true};
			}
			else
			{
				if(v>V&&a>=0)
				{
					arr[i]=spd{d,L,true};
					continue;
				}
				if(v<=V&&a<=0)
				{
					arr[i]=spd{-1,-1,false};
					continue;
				}
				double s0=1.0*(V+v)*(V-v)/(2*a)+d;
				if(s0>L&&a<0||s0<d&&a>0)
				{
					arr[i]=spd{d,L,true};
					continue;
				}
				if(s0<d||s0>L)
				{
					arr[i]=spd{-1,-1,false};
					continue;
				}
				if(a<0)arr[i]=spd{d,(int)(floor(s0+0.0004)),true};
				else arr[i]=spd{(int)(ceil(s0-0.0004)),L,true};
			}
		}	
		for(int i=0;i<m;i++)cin>>moni[i];
		sort(moni,moni+m);
		int ans=0,cnt=0;
		for(int i=0;i<n;i++)
		{
			if(arr[i].flag==false)
			{
				//cerr<<i<<'\n';
				continue;
			}
			int ll=arr[i].l,rr=arr[i].r;
			auto li=lower_bound(moni,moni+m,ll),ri=upper_bound(moni,moni+m,rr);
			if(li==ri) arr[i].flag=false;
			else ans++;
		}
		cout<<ans<<' ';
		sort(arr,arr+n);
		for(int i=0;i<n;i++)
		{
			if(arr[i].flag==false)continue;
			if(vc.empty()||*vc.rbegin()<arr[i].l)
			{
				vc.push_back(*(upper_bound(moni,moni+m,arr[i].r)-1));
				cnt++;
			}
		}
		cout<<m-cnt<<'\n';
	}
	return 0;
}

找到锅了踢我一下,好吧

2024/10/27 20:51
加载中...