WA on#8,#10求调
查看原帖
WA on#8,#10求调
765376
KingGojianOfYue楼主2024/11/28 09:45

好像没有这么着挂的

应该是 ai<0a_i<0 挂了(但不知道为什么会挂掉)

从官网上下载了数据发现每个都只差一点。。。

#include<bits/stdc++.h>
using namespace std;
struct node{
	long long l,r;
};
inline bool cmp(node x,node y){
	return x.r<y.r||(x.r==y.r&&x.l<y.l);
}
long long n,m,L,T,vxi,d,v,a,s,p[100005],sum[1000005],over_num,num;
vector<node>e;
vector<node>q;
void solve(){
	e.clear(),q.clear();over_num=num=0;
	memset(sum,0,sizeof(sum));
	scanf("%lld%lld%lld%lld",&n,&m,&L,&vxi);
	for(int i=1;i<=n;++i){
		scanf("%lld%lld%lld",&d,&v,&a);
		if(L<d)continue;
		if(a==0){
			if(v>vxi){
				e.push_back((node){d,L});
			}
			continue;
		}
		s=vxi*vxi-v*v;
		if(a>0){
			if(s>=0)s=d+s/(a<<1)+1;
			else s=d;
			if(s<=L)e.push_back((node){s,L});
		}else{
			if(s<1)e.push_back((node){d,min(d+(s+1)/(a<<1),L)});
		}
	}
	for(int i=1;i<=m;++i){
		scanf("%lld",&p[i]);
		sum[p[i]]=1;
	}
	for(int i=1;i<=1000000;++i)sum[i]+=sum[i-1];
	
	for(int i=0;i<e.size();++i){
		if(sum[e[i].r]-sum[e[i].l-1]>0)over_num++,q.push_back(e[i]);
	}
	printf("%lld ",over_num);
	sort(q.begin(),q.end(),cmp);
	for(int i=0,j=1;i<q.size();){
		while(j+1<=m&&p[j+1]<=q[i].r)++j;
		++num;
		while(i<q.size()&&p[j]>=q[i].l)++i;
	}
	printf("%lld\n",m-num);
}
int main()
{
//	freopen("detect8.in","r",stdin);
//	freopen("detect8.out","w",stdout);
	scanf("%lld",&T);
	while(T--)solve();
	return 0;
}
2024/11/28 09:45
加载中...