社区讨论

80分求条

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

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mhizlujj
此快照首次捕获于
2025/11/03 18:18
4 个月前
此快照最后确认于
2025/11/03 18:18
4 个月前
查看原帖
rt,第一问有时答案会多1
CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define db long double
const int MAXN=100010;
const db eps=0.0000000001;
int T,n,m,L,V,cnt,ans;
db p[MAXN],s[MAXN],e[MAXN];
int inds,inde;
struct node{
	db d,v,a;
};
struct det{
	int s,e;
};
node car[MAXN];
det detect[MAXN];
bool cmp(det a,det b){
	if(a.e==b.e) return a.s<b.s;
	return a.e<b.e;
}
db f(db v0,db v1,db a){
	return (v1*v1-v0*v0)/(2*a);
}
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>T;
	while(T--){
		cnt=0,ans=0;
		cin>>n>>m>>L>>V;
		for(int i=1;i<=n;i++){
			cin>>car[i].d>>car[i].v>>car[i].a;
		}
		for(int i=1;i<=m;i++){
			cin>>p[i];
		}
		for(int i=1;i<=n;i++){
			if(car[i].a>0){
				if(car[i].v<=V){
					s[i]=car[i].d+f(car[i].v,V,car[i].a);
					e[i]=1e18;
				}else{
					s[i]=car[i].d,e[i]=1e18;
				}
			}else if(car[i].a<0){
				if(car[i].v<=V){
					s[i]=e[i]=1e18;
				}else{
					s[i]=car[i].d;
					e[i]=car[i].d+f(car[i].v,V,car[i].a);
				}
			}else{
				if(car[i].v<=V){
					s[i]=e[i]=1e18;
				}else{
					s[i]=car[i].d,e[i]=1e18;
				}
			}
		}
		for(int i=1;i<=n;i++){
			inds=(lower_bound(p+1,p+m+1,s[i])-p);
			inde=(lower_bound(p+1,p+m+1,e[i])-p-1);

			if(inds<=inde && inds<=m){
				cnt++;
				detect[cnt]={inds,inde};
			}
		}
		sort(detect+1,detect+cnt+1,cmp);
		int lst=-1; 
		for(int i=1;i<=cnt;i++){
			if(lst<detect[i].s){
				lst=detect[i].e;
				ans++;
			}
		}
		cout<<cnt<<' '<<m-ans<<endl;
	}
}

回复

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

正在加载回复...