一看到最小的最大就能知道是二分啦
對於這道題,我們要二分的值肯定是可以知道的:行駛速度,因為求的是速度,而邊界條件就為\(0\)和最大的速度也就是路程總和了,對於精度,一般開在題目要求的精度上加\(4\)就行。\(cheak\)函式當然就是看以這個速度行走,能否到達終點即可。注意:題目雖然是說每一次的速度可以不一樣,但是我們都按最大值的話,可以到達後等待一會兒,效果是一樣的。能達到\(r\)就往\(mid\)移,縮小,反之。
知道了這些後,**就好寫了:
#include using namespace std;
struct node;
int n;
double l , r , mid , eps = 1e-6;
node a[200010];
bool cheak(double speed)
if(time > a[i].t) return false; //無法到達
} return true;
}int main()
printf("%.2f" , l);
return 0;
}
交上去後,最後乙個點被卡了對吧,是精度問題,於答案差\(0.01\),咋辦?這時就要請出比double更厲害的型別,long double,所有都改成long double即可過。(注意,用scanf的話搭配的輸入應該是scanf("%lf"))。
ac**:
#include using namespace std;
struct node;
int n;
long double l , r , mid , eps = 1e-6;
node a[200010];
bool cheak(long double speed)
if(time > a[i].t) return false;
} return true;
}int main()
printf("%.2lf" , l);
return 0;
}
洛谷 P1542 包裹快遞
小k成功地破解了密文。但是乘車到x國的時候,發現錢包被偷了,於是無奈之下只好作快遞員來攢足路費去orz教主 乙個快遞公司要將n個包裹分別送到n個地方,並分配給郵遞員小k乙個事先設定好的路線,小k需要開車按照路線給的地點順序相繼送達,且不能遺漏乙個地點。小k得到每個地方可以簽收的時間段,並且也知道路線...
Luogu P1542 包裹快遞
原題鏈結qwq 本題要求我們求出車的最大速度最小值。像求最大值最小 最小值最大這種型別的題目,我們很自然地就能想 到用二分答案 一般情況 來求解。做二分題目時,我們要弄清楚這樣幾點 二分什麼 如何判斷是否可行 即check函式的內容 當二分到乙個滿足條件的解時,l r 該如何移動 針對以上三個問題,...
洛谷 1542 快遞包裹
小k成功地破解了密文。但是乘車到x國的時候,發現錢包被偷了,於是無奈之下只好作快遞員來攢足路費去orz教主 乙個快遞公司要將n個包裹分別送到n個地方,並分配給郵遞員小k乙個事先設定好的路線,小k需要開車按照路線給的地點順序相繼送達,且不能遺漏乙個地點。小k得到每個地方可以簽收的時間段,並且也知道路線...