題目大意是給你兩個街道的寬度X,Y,以及汽車長度L ,汽車寬度W
問你汽車能不能從X街道開到Y街道
一開始想是不是數學問題,直到看到網上的圖片才知道這個是三分
三分只要知道凸函數就基本知道怎麼寫了
畢竟是模板
有了紅線代表的那個函數,我們就能知道,汽車過彎所需要的最小寬度
因此我們三分角度然後求出x即橫座標
三分出最大的x然後再比較就行了
#include <cstdio>
#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
#define MIN 1e-7
#define PI acos(-1.0)
double x,y,l,w;
double clac(double k)
{
return (x - l*sin(k) - w/cos(k)) / tan(k);
}
int main()
{
while(~scanf("%lf%lf%lf%lf",&x,&y,&l,&w))
{
int size = 100;
double left = 0 , right = PI*0.5;
double mid = 0 , midmid = 0 , ans1, ans2;
if(x<w || y<w) {printf("no\n");continue;}//直接判斷過不去
while(size--){
mid = (left+right)/2.0;
midmid = (mid + right)/2.0;
ans1 = clac(mid) , ans2 = clac(midmid);
if(ans1<ans2) right = midmid;
else left = mid;
}
if(fabs(ans1)>y) printf("no\n");
else printf("yes\n");
}
return 0;
}
三分說到底就是求公式以及找切入點
剛入門得花點時間