无故RE
查看原帖
无故RE
549228
Starmoon_dhw楼主2024/10/26 21:09
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+5;
struct node{
	int st,ed;
}t[N];
int T,n,m,L,v0,f[N],v[N],a[N],d[N],s[N],ans,x,ss,ans1;
bool cmp(node x,node y)
{
	if(x.st==y.st)
		return x.ed<y.ed;
	return x.st<y.st;
}
void solve()
{
	for(int i=1;i<=n;i++)
	{
		int minn=t[i].ed;
		int j=i;
		while(t[j].st<=t[i].ed&&t[j].st<=minn)
		{
			minn=min(minn,t[j].ed);
			j++;
		}
		ans1++;
		i=j;
	}
}
signed main()
{
	cin>>T;
	while(T--)
	{
		ans=0;
		ans1=0;
		memset(t,0,sizeof(t));
		memset(f,0,sizeof(f));
		memset(s,0,sizeof(s));
		cin>>n>>m>>L>>v0;
		for(int i=1;i<=n;i++)
			cin>>d[i]>>v[i]>>a[i];
		for(int i=1;i<=m;i++)
		{
			cin>>x;
			f[x]=1;
		}
		for(int i=1;i<=L;i++)
		{
			if(f[i])
				s[i]=s[i-1]+1;
			else
				s[i]=s[i-1];
		}
		for(int i=1;i<=n;i++)
		{
			if(a[i]==0)
			{
				if(v[i]>v0&&s[L]-s[d[i]-1]>0)
				{
					t[i].st=d[i];
					t[i].ed=L;
					ans++;
					
				}
				continue;
			}
			else if(v[i]>v0&&a[i]>0)
			{
				if(s[L]-s[d[i]-1]>0)
				{
					t[i].st=d[i];
					t[i].ed=L;
					ans++;
					continue;
				}
			}
			else if(v[i]<=v0&&a[i]<=0)
				continue;
			else 
			{
				bool flag=0;
				if( (v0+v[i])*(v0-v[i])%(2*a[i])==0 ) //计算移动距离 
					flag=1,ss=(v0+v[i])*(v0-v[i])/(2*a[i]);
				else
					ss=(v0+v[i])*(v0-v[i])/(2*a[i])+1;
				if(v[i]>v0&&a[i]<0) //逐渐不超速 
				{
					int ed=min(L,d[i]+ss);
					if(s[ed]-s[d[i]-1]>0)
					{
						t[i].st=d[i];
						t[i].ed=ed;
						ans++;
					}
				}
				else if(v[i]<=v0&&a[i]>0) //逐渐超速 
				{
					if(flag)
						ss++;
					int ed=min(L,d[i]+ss);
					if(s[ed]-s[d[i]-1]>0)
					{
						t[i].st=ed;
						t[i].ed=L;
						ans++;
					}
				}
				
			}
		
		}
		sort(t+1,t+1+n,cmp);
		solve();
		cout<<ans<<" "<<m-ans1<<"\n";
	}
	return 0;
}

2024/10/26 21:09
加载中...