Codeforces 8D Two Friends 三分+二分+計算幾何

來源:互聯網
上載者:User

標籤:class   blog   code   http   tar   com   

題目連結:點擊開啟連結


題意:點擊開啟連結

三分house到shop的距離,二分這條斜邊到cinema的距離

#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>#include<math.h>#include<set>#include<queue>#include<vector>#include<map>using namespace std;#define ll int#define N 90#define Pi 3.1415926535898#define eps 1e-10double t1, t2;struct node{double x,y;}c,h,s;double dist(double x1,double y1,double x2,double y2){return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));}double dist(node a,node b){return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));}double work(double du){node x = {s.x*(1-du) + h.x*du, s.y*(1-du)+h.y*du};double ac = dist(x,c), as = dist(x,s), ah = dist(x,h);if(ac+ah<=t2&&ac+as<=t1)return min(t2-ah,t1-as);double l = 0, r = 1.0;for(int i = 1; i <= 300 ; i++){double mid = (l+r)/2;node b = {c.x*(1-mid)+x.x*mid,c.y*(1-mid)+x.y*mid};double bc = dist(b,c), bs = dist(b, s), bh = dist(b, h);if(bc+bh<=t2 && bc+bs<=t1) l = mid;else r = mid;}node b = {c.x*(1-l)+x.x*l, c.y*(1-l)+x.y*l};return dist(b,c);}int main(){  ll i, j, u, v;while(cin>>t1>>t2){cin>>c.x>>c.y;cin>>h.x>>h.y;cin>>s.x>>s.y;double a = dist(c,s), b = dist(c,h), c = dist(h,s);if(b+t2>=a+c){printf("%.8lf\n",min(a+t1+c,b+t2));continue;}t1+=a+eps; t2+=b+eps;double l = 0, r = 1.0, ans = 0;for(i = 1; i <= 300; i++){double mid1 = (l+r)/2.0, mid2 = (mid1+r)/2.0;double ans1 = work(mid1), ans2 = work(mid2);if(ans1<ans2) l = mid1;else r = mid2;ans = max(ans, max(ans1,ans2));}printf("%.8lf\n",ans);}return 0;}


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.