社区讨论

0pts求调

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

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mjpy7lwf
此快照首次捕获于
2025/12/29 00:33
2 个月前
此快照最后确认于
2026/01/01 15:45
2 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
struct node{
	double l,r;
}pos[100001];
struct node2{
	ll l,r;
}pos2[100001];
ll t,n,m,l,V,d[100001],v[100001],a[100001],cnt,endd,Pos[100001],cal;
bool cmp(node2 x,node2 y){
	return x.r<y.r;
}
double find(double x){
	ll poss=lower_bound(Pos+1,Pos+m+1,x)-Pos;
	if (Pos[poss]==x) return poss;
	else return poss-0.5;
}
int main(){
	cin>>t;
	while (t--){
		cin>>n>>m>>l>>V;
		cnt=cal=0;
		for (ll i=1;i<=n;i++){
			cin>>d[i]>>v[i]>>a[i];
			if (a[i]==0){
				if (v[i]<=V) pos[i].l=pos[i].r=-1;
				else pos[i].l=d[i],pos[i].r=l; 
			}
			else if (a[i]<0){
				if (v[i]<=V) pos[i].l=pos[i].r=-1;
				else{
					pos[i].l=d[i];
					pos[i].r=(V*V-v[i]*v[i])/2.0/a[i]+d[i];
					if (pos[i].r>l) pos[i].r=l;
				}
			} 
			else{
				if (v[i]>V) pos[i].l=d[i],pos[i].r=l;
				else{
					double pos1=(V*V-v[i]*v[i])/2.0/a[i];
					pos[i].l=d[i]+pos1;
					if (pos[i].l>l) pos[i].l=pos[i].r=-1;
					else pos[i].r=l;
				} 
			}
		}
		for (ll i=1;i<=m;i++) cin>>Pos[i];
		for (ll i=1;i<=n;i++){
			if (pos[i].l==-1) continue;
			ll posl=lower_bound(Pos+1,Pos+m+1,pos[i].l)-Pos;
			ll posr=upper_bound(Pos+1,Pos+m+1,pos[i].r)-Pos-1;
			if (posl<=posr){
				pos2[++cal].l=posl,pos2[++cal].r=posr;
				cnt++;
			}
		}
		cout<<cnt<<' ';
		cnt=0;
		sort(pos2+1,pos2+cal+1,cmp);
		for (ll i=1;i<=cal;i++){
			if (pos2[i].l>endd){
				endd=pos2[i].r;
				cnt++;
			}
		}
		cout<<cal-cnt<<'\n';
	}
}

回复

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

正在加载回复...