八十分WA求助。答案有时大一,WA二大数据,代码简赅。赏做其粉丝
查看原帖
八十分WA求助。答案有时大一,WA二大数据,代码简赅。赏做其粉丝
992529
upto_300楼主2024/11/2 18:36

提交记录

#include<bits/stdc++.h>
#define cl(it) memset(it,0,sizeof it)
using namespace std;
int t,n,m,L,V,d[100005],v[100005],a[100005],p[100005],dp[100005],over;
vector<int>in[100005],out[100005];
set<int>incar,outcar;
int main(){
	cin>>t;
	while(t--){
		cin>>n>>m>>L>>V;
		cl(d),cl(v),cl(a),cl(p),cl(dp),over=0;
		incar.clear(),outcar.clear();
		for(int i=1;i<100005;i++)in[i].clear(),out[i].clear();
		for(int i=1;i<=n;i++)scanf("%d%d%d",&d[i],&v[i],&a[i]);
		for(int i=1;i<=m;i++)cin>>p[i];
		for(int i=1;i<=n;i++)
			if(d[i]<=p[m])
				if(a[i]==0){
					if(v[i]>V){
						in[lower_bound(p+1,p+1+m,d[i])-p].push_back(i);
						out[m+1].push_back(i);
						over++;
					}
				}else if(a[i]>0){
					if(v[i]>V){
						in[lower_bound(p+1,p+1+m,d[i])-p].push_back(i);
						out[m+1].push_back(i);
						over++;
					}else{
						long double s=((long double)1.0)*(V*V-v[i]*v[i])/2/a[i];
						if(d[i]+s-1e-8<=p[m]){
							in[lower_bound(p+1,p+1+m,d[i]+s)-p].push_back(i);
							out[m+1].push_back(i);
							over++;
						}
					}
				}else{
					if(v[i]>V){
						long double s=((long double)1.0)*(V*V-v[i]*v[i])/2/a[i];
						if(d[i]+s-1e-8>=p[lower_bound(p+1,p+1+m,d[i])-p]){
							in[lower_bound(p+1,p+1+m,d[i])-p].push_back(i);
							out[upper_bound(p+1,p+1+m,d[i]+s)-p].push_back(i);
							over++;
						};
					}
				}
		for(int i=1;i<=m;i++){
			for(int x:out[i])
				if(incar.count(x))
					outcar.insert(x);
			if(in[i].empty())dp[i]=dp[i-1];
			else{
				if(incar.empty())dp[i]=dp[i-1]+1;
				else if(outcar.empty())dp[i]=dp[i-1];
				else{
					dp[i]=dp[i-1]+1;
					incar.clear();
					outcar.clear();
				}
			}
			for(int x:in[i])incar.insert(x);
			
		}
		cout<<over<<' '<<m-dp[m]<<'\n';
	}
}
2024/11/2 18:36
加载中...