P9784 ROIR 2020 Day1 超速 题解
这题测试点是真的多
题目大意
有
思路
最小的最大,一眼二分答案。
不知道二分的建议先搞懂这题。
这题与二分模版不同的是,你需要先计算经过公路的时间,然后再对罚款范围进行二分。
代码
代码中的变量名意义与题目相同。
#include<bits/stdc++.h>
using namespace std;
int n,m,q,s,t,v[100005],l[100005],a[100005],f[100005];
bool check(int p){
double use=0;//利用double变量保留精度
for(int i=1;i<=n;i++){
use+=l[i]/(v[i]+p);
}
return use+s<=t;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>v[i];
}
for(int i=1;i<=n;i++){
cin>>l[i];
}
cin>>m;
for(int i=1;i<m;i++){
cin>>a[i];
}
for(int i=1;i<=m;i++){
cin>>f[i];
}
cin>>q;
while(q--){
int l=0,r=m-1,mid;
cin>>s>>t;
while(l<r){
mid=l+(r-l)/2;
if(check(a[mid])){
r=mid;
}else{
l=mid+1;
}
}
if(!check(a[l])){
l++;
}
cout<<f[l]<<endl;
}
return 0;
}
此题完结撒花!
夹带点私货
满堂花醉三千客,一剑霜寒十四州。