社区讨论

20pts求条玄关

P11232[CSP-S 2024] 超速检测参与者 1已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mhizs3dp
此快照首次捕获于
2025/11/03 18:23
4 个月前
此快照最后确认于
2025/11/03 18:23
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
#define double long double
#define int long long
using namespace std;
int T;
int n,m,L,V;
int ans1=0,ans2=0;
vector<int> road;
struct CAR{
	double l,r;
}car[100005],field[100005];
bool cmp(CAR x,CAR y){
	if(x.l!=y.l)return x.l<y.l;
	else return x.r<y.r;
}
void all_clear(){
	n=0,m=0,L=0,V=0;
	memset(car,0,sizeof car);
	road.clear();
	ans1=0,ans2=0;
}
void work(){
	cin>>n>>m>>L>>V;
	for(int i=1,d,v,a;i<=n;i++){
		cin>>d>>v>>a;
		if(v<=V){
			if(a<=0){
				i--,n--;continue;
			}
			else{
				car[i].l=((V-v)/a)*(V+v)/2+d;
				if(car[i].l>L){
					i--;n--;continue;
				}
				car[i].r=L;
			}
		}
		else{
			car[i].l=d;
			if(a<0)
				car[i].r=min(((V-v)/a)*(V+v)/2+d,L);
			else
				car[i].r=L;
		}
	}
	for(int i=1,p;i<=m;i++){
		cin>>p;
		road.insert(lower_bound(road.begin(),road.end(),p),p);
	}
	sort(car+1,car+1+n,cmp);
	for(int i=1;i<=n;i++){
		if(lower_bound(road.begin(),road.end(),car[i].l)!=road.end() and *lower_bound(road.begin(),road.end(),car[i].l)<=car[i].r){
			ans1++;
			if(field[ans2].r>=car[i].l and *lower_bound(road.begin(),road.end(),car[i].l)<=field[ans2].r)
				field[ans2].l=max(field[ans2].l,car[i].l),field[ans2].r=min(field[ans2].r,car[i].r);
			else{
				field[++ans2].l=car[i].l;
				field[ans2].r=car[i].r;
			}
		}else
			continue;
	}
	cout<<ans1<<' '<<m-ans2<<'\n';
	all_clear();
	return;
}
signed main(){
	ios::sync_with_stdio(false);
	cin.tie(0);cout.tie(0);
	cin>>T;
	while(T--)
		work();
	return 0;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...