求条
查看原帖
求条
1446545
XHZnewlife楼主2024/11/30 13:48
#include<bits/stdc++.h>
#define double long double
#define int long long
using namespace std;
int n,m,L,V;
struct CSY{
	int num;
}cs;
struct CAR{
	double d,v,a,cx;
}ca;
bool cmp(CAR x,CAR y){
	return x.cx<y.cx;
}
vector <CAR> car;
map<double,CSY>csy;
void work(){
	int ans1=0,ans2=0;
	cin>>n>>m>>L>>V;
	for(int i=1,d,v,a,ctt;i<=n;i++){
		cin>>d>>v>>a;
		if(!((v<V and a<=0) or sqrt(2*(L-d)*a+pow(v,2))<=V)){
			if(a==0)car.push_back({d,v,a,d});
			else car.push_back({d,v,a,((V-v)/a*(V+v))/2});
		}
	}
	for(int i=1;i<=m;i++){
		double x;
		cin>>x;
		csy[x].num=0;
	}
	sort(car.begin()+1,car.end(),cmp);
	for(int i=1;i<car.size();i++){
		if(car[i].a>=0){
			if(car[i].cx > (--csy.end())->first)continue;
			else csy[(--csy.end())->first].num++;
		}
		else if(car[i].a<0){
			if(car[i].cx> (csy.upper_bound(car[i].d))->first) csy[(csy.upper_bound(car[i].d))->first].num++;
			else continue;
		}
	}
	map<double,CSY>::iterator t=csy.begin();
	for(;t!=csy.end();t++){
		if((t->second).num > 0){
			ans1+=(t->second).num;
		}
		else ans2++;
	}
	cout<<ans1<<" "<<ans2;
	return;
}
signed main(){
	int T;
	cin>>T;
	for(int i=1;i<=T;i++){
		car.push_back(ca);
		work();
		car.clear();
		csy.clear();
	}
	return 0;
}

谢谢诸位dalao

2024/11/30 13:48
加载中...