题解
2026-08-15 14:16:49
发布于:浙江
20阅读
0回复
0点赞
首先先看题目,大意就是找到摄像头能拍到的超速的车的个数和保证还能拍到原先能拍到的超速的车的情况下能够删除的摄像头的最大个数,要注意只有在速度大于时才算超速,且只有在到达摄像头位置是才能被拍到
写代码时我们要先清楚怎么计算当前车速,没有学过的可以看题目最下面的提示
其中:是我们需要用到的
那么判断条件就是,但是这个式子里面有根号,容易产生误差,这个时候我们习惯两边同时平方
所以最终的判断条件就是
直接写是不太现实的,所以我们要先观察特殊性质,发现A保证加速度为0
那这种情况下,我们就只需要判断是否大于就行了,因为速度不会改变,那么摄像头只需要保留最北端也就是最后一个摄像头就一定能拍到所有超速的车了,所以这个时候能删除的最大的摄像头数就是(不过也有特殊情况,如果没有一辆车超速那么答案就是)
再看性质B,保证加速度大于0,
这个时候速度不断增大,那么同样的最后一个摄像头能拍到所有的超速车辆,不过这个时候需要计算到达最后一个摄像头的速度
前两个性质代码实现都较简单,但如果加入加速度小于0的情况就变得稍微有点复杂了
我们可以通过记录每个超速的车超速的时间范围(也就是摄像头需要拍到的范围)然后就可以按照最右边的范围来排序最后模拟一遍就完成了
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
ll n,m,L0,V;
//判断是否超速
ll query(ll v0,ll a,ll s){
return v0*v0+2*a*s;
}
bool check(ll v0,ll a,ll s){
return query(v0,a,s)>V*V;
}
void solve(){
cin>>n>>m>>L0>>V;
vector<ll>d(n+1),v(n+1),a(n+1);
for(int i=1;i<=n;i++)
cin>>d[i]>>v[i]>>a[i];
vector<ll>p(m+1);
for(int i=1;i<=m;i++)
cin>>p[i];
vector<pair<int,int>>ve;//记录每个超速的车能被检测到的范围L,R
for(int i=1;i<=n;i++){
//如果最后一个摄像头都拍不到就直接跳过
if(d[i]>p[m])continue;
//分别处理加速度等于大于和小于0的情况
if(a[i]==0){
//等于0时速度不会变,只需要判断初速度
if(v[i]<=V)continue;
int R=m;
int L=lower_bound(p.begin()+1,p.end(),d[i])-p.begin();
ve.push_back({L,R});
}else if(a[i]>0){
//大于0时速度回越来越大,R=m
if(!check(v[i],a[i],p[m]-d[i]))continue;
int L=m,R=m;
int l=lower_bound(p.begin()+1,p.end(),d[i])-p.begin();
int r=m;
while(l<=r){
int mid=(l+r)>>1;
if(check(v[i],a[i],p[mid]-d[i]))
r=mid-1,L=mid;
else l=mid+1;
}
ve.push_back({L,R});
}else{
int L=lower_bound(p.begin()+1,p.end(),d[i])-p.begin();
if(!check(v[i],a[i],p[L]-d[i]))continue;
int l=L,r=m,R=L;
while(l<=r){
int mid=(l+r)>>1;
if(!check(v[i],a[i],p[mid]-d[i]))
r=mid-1;
else l=mid+1,R=mid;
}
ve.push_back({L,R});
}
}
//按照R排序
sort(ve.begin(),ve.end(),[&](pair<int,int>a,pair<int,int>b){
return a.second<b.second;
});
int last=0;//记录上一个使用的摄像头
int ans=0;//记录使用的摄像头个数
for(auto [l,r]:ve){
if(last>=l && last<=r)continue;
last=r;
ans++;
}
cout<<ve.size()<<" "<<m-ans<<"\n";
}
int main(){
int t;
cin>>t;
while(t--)solve();
return 0;
}
全部评论 1
智齿
2天前 来自 浙江
0







有帮助,赞一个