【BZOJ1857】【SCOI2010】傳送帶 [三分]

傳送帶

Time Limit:?1 Sec??Memory Limit:?64 MB
[Submit][Status][Discuss]

Description

  在一個2維平面上有兩條傳送帶,每一條傳送帶可以看成是一條線段。兩條傳送帶分別為線段AB和線段CD。lxhgww在AB上的移動速度為P,在CD上的移動速度為Q,在平面上的移動速度R。現在lxhgww想從A點走到D點,他想知道最少需要走多長時間

Input

  輸入數據第一行是4個整數,表示A和B的坐標,分別為Ax,Ay,Bx,By 第二行是4個整數,表示C和D的坐標,分別為Cx,Cy,Dx,Dy 第三行是3個整數,分別是P,Q,R

Output

  輸出數據為一行,表示lxhgww從A點走到D點的最短時間,保留到小數點后2位

Sample Input

  0 0 0 100
  100 0 100 100
  2 2 1

Sample Output

  136.60

HINT

  對于100%的數據,1<= Ax,Ay,Bx,By,Cx,Cy,Dx,Dy<=1000
  1<=P,Q,R<=10

Main idea

  給定平面上的兩條線段AB,CD,在AB,CD上移動會有一個特別的速度,在平面上移動會有一個速度,求從點A到點D的最短時間。

Solution

  首先發現坐標范圍-1000~1000,并且精度要求不高,從此基礎上思考。我們先考慮從AB上一個定點O到CD上的距離,發現其中從O到CD的距離是先減小再增大的,我們大膽猜測這道題的答案滿足單峰性。然后我們可以用三分(效率為O(log1.5(n)))來實現。
  我們現在可以求出一個定點求CD的最短時間,這里用三分實現。然后怎么辦呢?
  由于AB也是一條線段,我們大膽猜測,可以再在AB上三分一個點,這樣就是三分套三分,最后發現其正確性可以證明。
  三分方法(這里給出求最小值的方法):在區間1/3處和2/3處各取兩個點l,r,如果左段(即L~l)的答案比右段(r~R)的更優,那么由于單峰性(圖像類似一個拋物線)可以抹去右段,多次操作使得答案最優。

Code

 1 #include<iostream>  
 2 #include<algorithm>  
 3 #include<cstdio>  
 4 #include<cstring>  
 5 #include<cstdlib>  
 6 #include<cmath>
 7 #include<queue>
 8 using namespace std;  
 9       
10 const int ONE=1005;
11 const int MOD=19650827;
12 
13 int n;
14 
15 struct power
16 {
17         double x,y;
18         double AB,CD,PM;
19         friend power operator +(power a,power b) {a.x=a.x+b.x; a.y=a.y+b.y; return a;}
20         friend power operator -(power a,power b) {a.x=a.x-b.x; a.y=a.y-b.y; return a;}
21         
22 };
23 power A,B,C,D,v;
24 power l1,l2,r1,r2;
25 power a,b;
26 power pass;
27 
28 int get()
29 {
30         int res,Q=1;    char c;
31         while( (c=getchar())<48 || c>57)
32         if(c=='-')Q=-1;
33         if(Q) res=c-48; 
34         while((c=getchar())>=48 && c<=57) 
35         res=res*10+c-48; 
36         return res*Q; 
37 }
38 
39 double dist(power a,power b)
40 {
41         return (double)sqrt( (a.x-b.x)*(a.x-b.x) + (a.y-b.y)*(a.y-b.y));
42 }
43 
44 double Getdist(power E,power F)
45 {
46         return dist(A,E)/v.AB + dist(E,F)/v.PM + dist(F,D)/v.CD;
47 }
48 
49 double Trivide(power O)
50 {
51         power l=C,r=D,pass,a,b;
52         while(dist(l,r)>0.001)
53         {
54             pass.x=(r.x-l.x)/3.0;    pass.y=(r.y-l.y)/3.0;
55             a=l+pass;    b=r-pass;
56             if(Getdist(O,a) < Getdist(O,b)) r=b;
57             else l=a;
58         }
59         return Getdist(O,l);
60 }
61 
62 int main()
63 {
64         scanf("%lf %lf %lf %lf",&A.x,&A.y,&B.x,&B.y);
65         scanf("%lf %lf %lf %lf",&C.x,&C.y,&D.x,&D.y);
66         scanf("%lf %lf %lf",&v.AB,&v.CD,&v.PM);    
67         
68         power l=A,r=B;
69         while(dist(l,r)>0.001)
70         {
71             pass.x=(r.x-l.x)/3.0;    pass.y=(r.y-l.y)/3.0;
72             a=l+pass;    b=r-pass;
73             if(Trivide(a) < Trivide(b)) r=b;
74             else l=a;
75         }
76         
77         printf("%.2lf",Trivide(l));
78 }
View Code

?

轉載于:https://www.cnblogs.com/BearChild/p/6441257.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/393700.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/393700.shtml
英文地址,請注明出處:http://en.pswp.cn/news/393700.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

google android廣告異步加載,谷歌廣告異步代碼和同步代碼的解決方法

通常大部分人初次接觸谷歌google adsense廣告聯盟都會有疑問&#xff0c;在新建單元界面我們可以看到獲取代碼類型選項。下面是學習啦小編為大家整理的關于谷歌廣告異步代碼和同步代碼的解決方法&#xff0c;一起來看看吧!谷歌廣告異步代碼和同步代碼的解決方法選擇同步還是異步…

openssl 加密解密 指令_Shell openssl命令加密解密字符串

Linux下的 openssl 命令解密我們以在線加密網站為例 http://tool.chacuo.net/cryptdes我們選擇des cbc模式&#xff0c;密鑰為abcdefgh&#xff0c; 偏移量為12345678&#xff0c;以base64輸出結果 對hello進行加密&#xff0c;得到結果8Snw/EmQdY我們再用將在線網站改用shell命…

使用Docker 安裝Elasticsearch、Elasticsearch-head、IK分詞器 和使用

使用Docker 安裝Elasticsearch、Elasticsearch-head、IK分詞器 和使用 原文:使用Docker 安裝Elasticsearch、Elasticsearch-head、IK分詞器 和使用Elasticsearch的安裝 一、elasticsearch的安裝 1.鏡像拉取 docker pull elasticsearch:tag2.啟動 docker run -it -e "disc…

Spring 的持久化實例(JDBC, JdbcTemplate、HibernateDaoSupport、JdbcDaoSupport、SqlSessionDaoSupport等)...

2019獨角獸企業重金招聘Python工程師標準>>> 一、表&#xff08;這里用mysql&#xff0c;數據庫名為yiibai&#xff09; CREATE TABLE customer (CUST_ID int(10) UNSIGNED NOT NULL,NAME varchar(100) NOT NULL,AGE int(10) UNSIGNED NOT NULL ) ENGINEInnoDB DEFA…

開始使用gradle

前提配置gradle環境 每個gradle構建都是以一個腳本開始的。gradle構建默認的名稱為build.gradle。當在shell中執行gradle命令時&#xff0c;gradle會去尋找為build.gradle文件&#xff0c;如果找不到就會顯示幫助信息。 下面我們以經典的helloworld為例。 1、首先建立一個build…

freecodecamp_freeCodeCamp的新編碼課程現已上線,其中包含1,400個編碼課程和6個開發人員認證

freecodecampFor the past year, our community has been hard at work on a massive new programming curriculum. And now that curriculum is live and out of beta!在過去的一年中&#xff0c;我們的社區一直在努力編寫大量的新編程課程。 現在&#xff0c;該課程已上線并且…

麥克勞林展開式_數學家麥克勞林與牛頓的故事

數學家麥克勞林麥克勞林(Colin Maclaurin1698年2月-1746年6月), 蘇格蘭數學家&#xff0c;麥克勞林是18世紀英國最具有影響的數學家之一。01麥克勞林是一位牧師的兒子&#xff0c;半歲喪父&#xff0c;9歲喪母。由其叔父撫養成人。叔父也是一位牧師。麥克勞林是一個“神童”&am…

html隱藏層點擊顯示不出來,[js+css]點擊隱藏層,點擊另外層不能隱藏原層

1貨幣轉換&#xff0c;下圖顯示了這個程序子只進行簡單的 把元素放在下面的目錄下&#xff0c;在創幣轉換應用程序這個例 所需的界面&#xff0c;包括一些UI組件實例(Button, ComboB 貨幣轉換&#xff0c;下圖顯示了這個程序組件實例(Button, ComboB 貨幣轉換&#xff0c;下圖顯…

Oracle 10.2.0.5 非歸檔current redolog損壞處理一例

操作系統: RHEL5.8 x64數據庫 : Oracle 10.2.0.5.0故障情況:一臺單機曙光PC服務器4塊300G SAS盤&#xff0c;RAID5壞兩塊磁盤&#xff08;服務器面板無故障提示&#xff0c;無人發現&#xff09;&#xff0c;造成RAID5磁盤陣列掛掉&#xff0c;操作系統當機&#xff0c;系統無…

基礎命令

date --help date %T 15:04:58 whatis date date (1) - print or set the system date and timeman date 獲取詳細的命令解釋cd ~/wntlab //新建文件夾 mkdir example //新建文件 touch b c //復制文本內容 cp b c//把 b的內容復制給 c cp b a/ //把 文件b復制…

微信小程序把玩(三十三)Record API

微信小程序把玩&#xff08;三十三&#xff09;Record API 原文:微信小程序把玩&#xff08;三十三&#xff09;Record API其實這個API也挺奇葩的&#xff0c;錄音結束后success不走&#xff0c;complete不走&#xff0c;fail也不走&#xff0c; 不知道是不是因為電腦測試的原因…

leetcode336. 回文對(字典樹)

給定一組 互不相同 的單詞&#xff0c; 找出所有不同 的索引對(i, j)&#xff0c;使得列表中的兩個單詞&#xff0c; words[i] words[j] &#xff0c;可拼接成回文串。 示例 1&#xff1a; 輸入&#xff1a;[“abcd”,“dcba”,“lls”,“s”,“sssll”] 輸出&#xff1a;[[…

html文檔 字符引用,【轉】HTML中常見形如#number;的東西叫做 字符實體引用,簡稱引用,代表一個對應的unicode字符...

【轉】HTML中常見形如number;的東西叫做 字符實體引用&#xff0c;簡稱引用&#xff0c;代表一個對應的unicode字符英文解釋的很清楚&#xff0c;就不翻譯了&#xff0c;自己看&#xff1a;EntitiesCharacter entity references, or entities for short, provide a method of e…

終端打開后-bash_如何爵士化Bash終端-帶有圖片的分步指南

終端打開后-bashby rajaraodv通過rajaraodv In this blog I’ll go over the steps to add Themes, Powerline, fonts, and powerline-gitstatus to make your regular Bash Terminal look beautiful and useful as shown in the picture above.在此博客中&#xff0c;我將介紹…

如何獲取元素在父級div里的位置_關于元素的浮動你了解多少

首先&#xff0c;在介紹什么是浮動之前我們先介紹一下html中元素的普通流布局方式。在普通流中&#xff0c;元素是按照它在 HTML 中的出現的先后順序自上而下依次排列布局的&#xff0c;在排列過程中所有的行內元素水平排列&#xff0c;直到當行被占滿然后換行&#xff0c;塊級…

獲取iOS頂部狀態欄和Navigation的高度

狀態欄的高度 20 [[UIApplication sharedApplication] statusBarFrame].size.height Navigation的高度 44 self.navigationController.navigationBar.frame.size.height 加起來一共是64 轉載于:https://www.cnblogs.com/Free-Thinker/p/6478715.html

Java電商項目-5.內容管理cms系統

目錄 實現加載內容分類樹功能實現內容分類動態添加刪除內容分類節點實現內容分類節點的分頁顯示實現廣告內容的添加實現廣告內容刪除實現廣告內容編輯到Github獲取源碼請點擊此處實現加載內容分類樹功能 注: 往后將不在說編寫遠程服務方法和編寫web模塊等重復語句, 直接用"…

leetcode738. 單調遞增的數字(貪心)

給定一個非負整數 N&#xff0c;找出小于或等于 N 的最大的整數&#xff0c;同時這個整數需要滿足其各個位數上的數字是單調遞增。 &#xff08;當且僅當每個相鄰位數上的數字 x 和 y 滿足 x < y 時&#xff0c;我們稱這個整數是單調遞增的。&#xff09; 示例 1: 輸入: …

MySQL purge 線程

MySQL中purge線程知識&#xff1a;https://dev.mysql.com/doc/refman/5.7/en/innodb-improved-purge-scheduling.htmlInnoDB中delete所做刪除只是標記為刪除的狀態&#xff0c;實際上并沒有刪除掉&#xff0c;因為MVCC機制的存在&#xff0c;要保留之前的版本為并發所使用。最終…

安裝inde.html使用babel,reactjs – 使用Babel Standalone進行單個React組件渲染,僅使用index.html和Component...

Noob與React在這里.我正在玩React.我有一個簡單的組件在我的component.js中呈現.它包含在我的index.html文件中.我在頭部包含了React,ReactDOM和babel的腳本.我只想看到一個div正確渲染.我還沒有使用Node,只是使用React和Babel(使用babel-standalone).我正在使用一個簡單的http…