社区讨论
30pts求调
P11232[CSP-S 2024] 超速检测参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @m49gvf33
- 此快照首次捕获于
- 2024/12/04 13:47 去年
- 此快照最后确认于
- 2025/11/04 13:22 4 个月前
思路:贪心+二分
CPP#include<bits/stdc++.h>
using namespace std;
#define ll long long
struct C{
int d,v,a;
}w[100010];
struct check{
int lt,rt;
}t[100010];
bool cmp(check A,check B){
return A.rt<B.rt;
}
int p[100010];
int T;
int n,m,L,V,sum,ans;
int bs1(int x){
int lt=1,rt=m;
while(lt<rt){
int mid=(lt+rt)/2;
if(p[mid]<x) lt=mid+1;
else rt=mid;
}
return lt;
}
int bs2(int a,int b,int c){
int lt=1,rt=m;
while(lt<rt){
int mid=(lt+rt)/2;
if(sqrt(pow(b,2)*1.0+2*c*(p[mid]-a))>V) rt=mid;
else lt=mid+1;
}
return lt;
}
int bs3(int a,int b,int c){
int lt=1,rt=m;
while(lt<rt){
int mid=(lt+rt+1)/2;
if(sqrt(pow(b,2)*1.0+2*c*(p[mid]-a))>V) lt=mid;
else rt=mid-1;
}
return lt;
}
int main(){
cin>>T;
while(T--){
memset(w,0,sizeof(w));
memset(t,0,sizeof(t));
memset(p,0,sizeof(p));
sum=0,ans=0;
scanf("%d %d %d %d",&n,&m,&L,&V);
for(int i=1;i<=n;i++) scanf("%d %d %d",&w[i].d,&w[i].v,&w[i].a);
for(int i=1;i<=m;i++) scanf("%d",&p[i]);
for(int i=1;i<=n;i++){
if(!w[i].a){
if(w[i].v>V) t[i].lt=bs1(w[i].d),t[i].rt=m;
}else if(w[i].a>0){
if(bs2(w[i].d,w[i].v,w[i].a)<=m) t[i].lt=bs2(w[i].d,w[i].v,w[i].a),t[i].rt=m;
}else if(w[i].v>V && sqrt(pow(w[i].v,2)*1.0+2.0*w[i].a*(p[bs1(w[i].d)]-w[i].d))>V){
if(bs3(w[i].d,w[i].v,w[i].a)) t[i].lt=bs1(w[i].d),t[i].rt=bs3(w[i].d,w[i].v,w[i].a);
}
if(t[i].lt) sum++;
}
sort(t+1,t+n+1,cmp);
int r=0;
for(int i=1;i<=n;i++){
if(t[i].lt>r && t[i].lt){
ans++;
r=t[i].rt;
}
}
cout<<sum<<" "<<m-ans<<endl;
}
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...