社区讨论

WA60pts求调(调好为义父)

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

讨论操作

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

当前回复
4 条
当前快照
1 份
快照标识符
@m2zxev2y
此快照首次捕获于
2024/11/02 16:53
去年
此快照最后确认于
2025/11/04 15:31
4 个月前
查看原帖
所有能过的都过了,就洛谷有4个测试点过不了,求大佬调
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=200010;
struct car{
	int d,v,a;
}c[N];
struct edge{
	int l,r;
	bool operator<(const edge &a)const{return l<a.l;}
}e[N];
int dis[N],m,v;
int findn(int de){
	int l=1,r=m;
	while(l<r){
		int mid=(l+r)>>1;
		if(dis[mid]>=de)r=mid;
		else l=mid+1;
	}
	return l;
}
int findf(int de){
	int l=1,r=m;
	while(l<r){
		int mid=(l+r+1)>>1;
		if(v*v<2*c[de].a*(dis[mid]-c[de].d)+c[de].v*c[de].v)l=mid;
		else r=mid-1;
	}
	return l;
}
signed main(){ 
	//freopen("detect1.in","r",stdin);
	//freopen("detect.out","w",stdout);
	int t;
	cin>>t;
	while(t--){
		int n,l,cnt=0;
		cin>>n>>m>>l>>v;

		for(int i=1;i<=n;i++){
			cin>>c[i].d>>c[i].v>>c[i].a;
		}
		for(int i=1;i<=m;i++){
			cin>>dis[i];
		}
		for(int i=1;i<=n;i++){
			if(dis[m]>=c[i].d){
				if(c[i].a<=0 && c[i].v<=v)continue;
				else if(c[i].a>0 && c[i].v>v){
					int l=findn(c[i].d);
					cnt++;
					e[cnt]={l,m};
				}
				else if(c[i].a==0){
					int l=findn(c[i].d);
					cnt++;
					e[cnt]={l,m};
				}
				else if(c[i].a>0){
					l=findn(c[i].d+(v*v-c[i].v*c[i].v)/(2*c[i].a));
					if(v*v<2*c[i].a*(dis[m]-c[i].d)+c[i].v*c[i].v){
						cnt++;
						e[cnt]={l,m};
					}
				}
				else{
					int l=findn(c[i].d);
					int r=findf(i);
					if(v*v<2*c[i].a*(dis[l]-c[i].d)+c[i].v*c[i].v){
						cnt++;
						e[cnt]={l,r};
					}
				}
			}
		}
		int ans=0;
		sort(e+1,e+1+cnt);
		int minn=e[1].r;
		for(int i=1;i<=cnt;i++){
			//cout<<"########   "<<e[i].l<<" "<<e[i].r<<endl;
			if(e[i].l>minn){
				ans++;
				minn=e[i].r;
			}
			else{
				minn=min(minn,e[i].r);
			}
		}
		cout<<cnt<<" "<<m-ans-1<<endl;
	}
} 

回复

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

正在加载回复...