题解 | qcjj寄快递
qcjj寄快递
https://www.nowcoder.com/practice/229bbec64b6b42e48171bef8f88ada47
#include <bits/stdc++.h>
using namespace std;
//数据准备
const double LN2=log(2.0);
const double INV_LN2=1.0/LN2;
//核心函数
double min_time(double e){
if(e*LN2>=1.0){
double k=log2(e*LN2);
return 2.0*k+2*e/pow(2.0,k);
}
else{
return 2.0*e;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin>>n;
vector<pair<double,double>>points(n);//pair是标准库中模版,用于存储两个相关的值
for(int i=0;i<n;i++){
cin>>points[i].first>>points[i].second;//points[i].first存储x坐标,points[i].second存储y的坐标
}
double total=0;
for(int i=1;i<n;i++){
double dx=points[i].first-points[i-1].first;
double dy=points[i].second-points[i-1].second;
double e=sqrt(dx*dx+dy*dy);
total+=min_time(e);
}
cout<<fixed<<setprecision(10)<<total<<endl;
return 0;
}
// 64 位输出请用 printf("%lld")
我是菜鸟喵,说说我的思路
一道数学求值题,打字有点麻烦,直接上图片
查看9道真题和解析