样例4第一列没过,求助
查看原帖
样例4第一列没过,求助
596945
nahidaa楼主2024/10/28 14:14
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll NXD,n,m,L,V,mo[100005],qianzhui[1000005],ans;
bool o[1000005];
struct carr{
	ll wei,v,a;
}c[100005];
struct qu{
	ll l,r;
}d[100005];
ll read(){
	ll x=0,sign=1;
	char c=getchar();
	while(!(c>='0'&&c<='9')){
		if(c=='-')sign=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=x*10+c-'0';
		c=getchar();
	}
	return x*sign;
}
int main()
{
//	freopen("detect4.in","r",stdin);
	NXD=read();
	for(int RP=1;RP<=NXD;RP++){
		n=read(),m=read(),L=read(),V=read();
		for(int i=1;i<=n;++i){
			c[i]=(carr){read(),read(),read()};
			if(c[i].v>V){
				if(c[i].a>=0){
					d[i]=(qu){c[i].wei,L};
				}else{
					d[i]=(qu){c[i].wei,min(L,c[i].wei+(-V*V+c[i].v*c[i].v-1)/(-2*c[i].a))};
				}
			}else{
				if(c[i].a<=0){
					d[i]=(qu){L+1,L+1};
				}else{
					d[i]=(qu){c[i].wei+(V*V-c[i].v*c[i].v-1)/(2*c[i].a)+1,L};
				}
			}
		}
		memset(o,0,sizeof(o));
		memset(qianzhui,0,sizeof(qianzhui));
		for(int i=1;i<=m;++i){
			mo[i]=read();
			o[mo[i]]=1;
		}
		sort(mo+1,mo+m+1);
		qianzhui[0]=o[0];
		for(int i=1;i<=L;++i){
			qianzhui[i]=qianzhui[i-1]+o[i];
		}
		ans=0;
		for(int i=1;i<=n;++i){
			if((d[i].l==d[i].r&&d[i].l==L+1)||d[i].l>L||d[i].l>d[i].r)continue;
			if(d[i].l==0){
				if(qianzhui[d[i].r]!=0){
					ans++;
				}
			}else if(qianzhui[d[i].r]!=qianzhui[d[i].l-1]){
				ans++;
			}
		}
		cout<<ans<<"\n";
	}
	return 0;
}
/*



*/
2024/10/28 14:14
加载中...