10pts暴力求调(期望40pts)(特殊性质AB)
查看原帖
10pts暴力求调(期望40pts)(特殊性质AB)
983912
Linzijun_0607楼主2024/10/26 23:40
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+5;
int t,n,m,L=0,V; 
int d[N],v[N],a[N],p[N],vis[N],fin[N*10];
signed main(){
	freopen("detect3.in","r",stdin);
	cin>>t;
	while(t--){
		for(int i=1;i<=L;i++) fin[i]=0;
		scanf("%d%d%d%d",&n,&m,&L,&V);
		for(int i=1;i<=n;i++) scanf("%d%d%d",d+i,v+i,a+i);
		for(int i=1;i<=m;i++){scanf("%d",p+i);vis[i]=0;};vis[0]=0;
		sort(p+1,p+m+1);p[m+1]=1e9;
		int id=1;
		for(int i=1;i<=L;i++){while(id<=m&&p[id]<i) id++;fin[i]=id;}
		for(int i=1;i<=n;i++){
			if(a[i]>0){
				if(v[i]>V) {vis[fin[d[i]]]++;continue;}
				int dis=d[i]+(V*V-v[i]*v[i])/(2*a[i])+1;
				if(dis<=L) vis[fin[dis]]++;
			}
			if(a[i]==0&&v[i]>V) vis[fin[d[i]]]++;
		}
		int ans=0,flag=0;
		for(int i=1;i<=m;i++) ans+=vis[i],flag=(flag||vis[i]);
		printf("%d %d\n",ans,m-flag);
	}
}
2024/10/26 23:40
加载中...