1. 程式人生 > >[SCOI2010真題][bzoj1857]傳送帶

[SCOI2010真題][bzoj1857]傳送帶

題目背景
SCOI2010 DAY2 T2
bzoj 1857

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

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

輸出格式


輸出資料為一行,表示 Lxhgww 從 A 點走到 D 點的最短時間,保留到小數點後 2 位。

樣例資料
輸入
0 0 0 100
100 0 100 100
2 2 1
輸出
136.60

備註
【資料範圍】
對於 100% 的資料,1≤Ax,Ay,Bx,By,Cx,Cy,Dx,Dy≤1000 ;1≤P,Q,R≤10 。

分析:這道題是一個三分套三分。可以感知資料是一個開口向上的二次函式(也可能只是長得像……),所以可以三分,先在AB傳送帶上三分從這條傳送帶上出去的地方,然後三分CD傳送帶上進去的地方,最後得到res。
幾個注意事項:
1、兩個傳送帶的解析式要用ax+by+c的標準式(防止斜率不存在的情況)
2、每個三分要加一個判斷(有傳送帶長度為零的情況,三分都不會進入)
3、聯立兩個ax+by+c=0(起點和終點),相減得a(x1-x2)+b(y1-y2)=0,此時a=y1-y2、b=x2-x1是這個二元一次方程的一組解,就可以求c了,可以苟且地算出直線方程(沒化簡的那種orz)。

程式碼

自己打的!從copy走向自產的第一步!

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<ctime>
#include<cmath>
#include<algorithm>
#include<cctype>
#include<iomanip>
#include<queue>
#include<
set> using namespace std; int getint() { int sum=0,f=1; char ch; for(ch=getchar();(ch<'0'||ch>'9')&&ch!='-';ch=getchar()); if(ch=='-') { f=-1; ch=getchar(); } for(;ch>='0'&&ch<='9';ch=getchar()) sum=(sum<<3)+(sum<<1)+ch-48; return sum*f; } const double eps=1e-8; double Ax,Ay,Bx,By,Cx,Cy,Dx,Dy,P,Q,R; double a1,b1,c1,a2,b2,c2; double res=0x3f3f3f3f; double dis(double x1,double y1,double x2,double y2)//計算兩點間距離 { return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); } double tim(double x1,double y1,double x2,double y2)//計算這種情況所需時間 { return dis(Ax,Ay,x1,y1)/P+dis(x1,y1,x2,y2)/R+dis(x2,y2,Dx,Dy)/Q; } double sanfen2(double x,double y) { double ans=0x3f3f3f3f; double lx=min(Cx,Dx),rx=max(Cx,Dx),ly,ry; if(lx==rx) ly=min(Cy,Dy),ry=max(Cy,Dy); else ly=(-a2*lx-c2)/b2,ry=(-a2*rx-c2)/b2; while(fabs(lx-rx)>eps||fabs(ly-ry)>eps) { double fx=(rx-lx)/3; double fy=(ry-ly)/3; double midlx=lx+fx,midrx=rx-fx,midly=ly+fy,midry=ry-fy; double l=tim(x,y,midlx,midly),r=tim(x,y,midrx,midry); if(l-r>eps) { ans=min(ans,r); lx=midlx,ly=midly; } else { ans=min(ans,l); rx=midrx,ry=midry; } } ans=min(tim(x,y,lx,ly),ans);//特判CD長度為零 return ans; } void sanfen1() { double lx=min(Ax,Bx),rx=max(Ax,Bx),ly,ry; if(lx==rx) ly=min(Ay,By),ry=max(Ay,By); else ly=(-a1*lx-c1)/b1,ry=(-a1*rx-c1)/b1; while(fabs(lx-rx)>eps||fabs(ly-ry)>eps) { double fx=(rx-lx)/3; double fy=(ry-ly)/3; double midlx=lx+fx,midrx=rx-fx,midly=ly+fy,midry=ry-fy; double l=sanfen2(midlx,midly),r=sanfen2(midrx,midry);//第二層三分 if(l-r>eps) { res=min(res,r); lx=midlx,ly=midly; } else { res=min(res,l); rx=midrx,ry=midry; } } if(res==0x3f3f3f3f)//特判AB長度為零 res=sanfen2(Ax,Ay); } int main() { freopen("csd.in","r",stdin); freopen("csd.out","w",stdout); Ax=getint();Ay=getint();Bx=getint();By=getint(); Cx=getint();Cy=getint();Dx=getint();Dy=getint(); P=getint();Q=getint();R=getint(); a1=Ay-By;b1=Bx-Ax;c1=-a1*Ax-b1*Ay;//這個計算公式推斷見上 a2=Cy-Dy;b2=Dx-Cx;c2=-a2*Cx-b2*Cy; sanfen1();//第一層三分 printf("%0.2f",res); return 0; }

本題結。

相關推薦

[SCOI2010][bzoj1857]傳送帶

題目背景 SCOI2010 DAY2 T2 bzoj 1857 題目描述 在一個 2 維平面上有兩條傳送帶,每一條傳送帶可以看成是一條線段。兩條傳送帶分別為線段 AB 和線段 CD。Lxhgww 在 AB 上的移動速度為 P,在 CD 上的移動速度為 Q

百度2017春招筆試編程集合之尋找三角形

import math 可能 表示 tint blog 整數 angle printf 題目描述 三維空間中有N個點,每個點可能是三種顏色的其中之一,三種顏色分別是紅綠藍,分別用‘R‘, ‘G‘, ‘B‘表示。 現在要找出三個點,並組成一個三角形,使得這個三角形的面積最大。

第四屆(13年)藍橋杯java B組決賽

pla 標題 boolean pub for ide 真題 code one 1、標題:猜燈謎(填空) A 村的元宵節燈會上有一迷題: 請猜謎 * 請猜謎 = 請邊賞燈邊猜 小明想,一定是每個漢字代表一個數字,不同的漢字代表不同的數字。

算法筆記_204:第四屆藍橋杯軟件類決賽(Java語言C組)

系統 主類 文字 新節點 origin pack log 破壞 src 目錄 1 好好學習 2 埃及分數 3 金蟬素數 4 橫向打印二叉樹 5 危險系數 6 公式求值 1 好好學習 湯姆跟爺爺來中國旅遊。一天,他幫助中國的小朋友貼標語。他負責貼的標語是分別寫在四

算法筆記_206:第五屆藍橋杯軟件類決賽(Java語言A組)

理論 cnblogs 條件 font 9.png 生成 true 突變 幻方 目錄 1 海盜分金幣 2 六角幻方 3 格子放雞蛋 4 排列序數 5 冪一矩陣 6 供水設施 1 海盜分金幣 有5個海盜,相約進行一次帆船比賽。 比賽中天氣發生突變,他們被沖

采購單(京東2017秋招

python 格式本來也不算很難的一道題,但是總是只通過60% 或者 80%一眼就看出思路,代碼也不難的題就是不能全部通過也是神煩,應該是格式上的問題,也不算完全弄明白了,簡單說說,作為一種經驗。思路:給價錢 和 每種物品的個數排序 最貴:最高價買最多的物品,累加 最低:最低價買最多的物品

算法筆記_208:第六屆藍橋杯軟件類決賽(Java語言A組)

boolean style 空格 ima eight jdk1 ++ port 但是 目錄 1 胡同門牌號 2 四階幻方 3 顯示二叉樹 4 穿越雷區 5 切開字符串 6 鋪瓷磚 前言:以下代碼僅供參考,若有錯誤歡迎指正哦~ 1 胡同門牌號 標題:胡

2017年上半年教師資格證考試《幼兒保教知識與能力》

影響 選擇題 .html 教師 暫停 過程 考試 必須 ref 一、單項選擇題(本題共10道小題,每道3分,共計30分)1.下列哪一種活動重點不是發展幼兒的精細動作能力?( )A.扣紐扣B.使用剪刀C.雙手接球D.系鞋帶【答案】C。解析:雙手接球重點發展的是幼兒的粗大動作。

算法筆記_212:第七屆藍橋杯軟件類決賽(Java語言B組)

技術 emp 字符串表 求解 如果 過去 系統 多少 ann 目錄 1 憤怒小鳥 2 反幻方 3 打靶 4 路徑之謎 5 堿基 6 圓圈舞 前言:以下代碼僅供參考,若有錯誤歡迎指正哦~ 1 憤怒小鳥 憤怒小鳥 X星球憤怒的小鳥喜歡撞火車! 一根平直的鐵

網易2017春招筆試編程集合——分餅幹

out color div nbsp -1 pre new har nco 參考:http://blog.csdn.net/wwe4023/article/details/70171648的內容 // import java.util.*; public class M

網易2017春招筆試編程集合(10)——小易記單詞

bsp math 字符串 array 如果 new 是否 數據 作用 小易參與了一個記單詞的小遊戲。遊戲開始系統提供了m個不同的單詞,小易記憶一段時間之後需要在紙上寫出他記住的單詞。小易一共寫出了n個他能記住的單詞,如果小易寫出的單詞是在系統提供的,將獲得這個單詞長度的平方

網易2017春招筆試編程集合(8)——奇怪的表達式求值

next ann new switch 運算 ase 自己 lin pri 常規的表達式求值,我們都會根據計算的優先級來計算。比如*/的優先級就高於+-。但是小易所生活的世界的表達式規則很簡單,從左往右依次計算即可,而且小易所在的世界沒有除法,意味著表達式中沒有/,只有(+

2017年軟考各科最新詳細解析資料集錦

軟考真題 軟考答案 軟考真題答案 軟考真題資料 軟考真題視頻 作為51CTO學院的軟考培訓講師,本著對廣大學員負責的態度,在每年同學們參加完軟考考試,我都會盡早的給大家發布各科的真題詳細解析資料。一方面是為了參加軟考考試的同學對自己考試情況做一個準確評估;另一方面是為未來參加軟考考試的學員

網易2017春招筆試編程集合(7)——集合

復雜 bsp span 問題 args 一個 add port code 小易最近在數學課上學習到了集合的概念,集合有三個特征:1.確定性 2.互異性 3.無序性.小易的老師給了小易這樣一個集合:S = { p/q | w ≤ p ≤ x, y ≤ q ≤ z }需要根據給

2013年考研英語(二)閱讀 第3篇 Snap decisions

ati 閱讀 uri app call 想要 速度 代理 dog Scientists have found that although we are prone to snap over reactions, if we take a moment and think

廈門大學考研上機

排序 pos else 大寫 出現 16進制 bsp input 回文 廈門大學考研上機真題 來自於:王道論壇-2017廈大計算機專碩復試題 判斷回文數字 第一題判斷一個整數是否為回文數,例如123321 1 #include <stdio.h>

玩轉算法面試 互聯網公司【完整版】

for src 互聯網 c11 下載地址 http .html 互聯網公司 .net 下載地址:http://feixueteam.net/thread-1166-1-1.html玩轉算法面試 互聯網公司真題【完整版】

python學習_day13___面試模擬講解

copy 斐波那契數列 後綴 個數字 .com ict 但是 utf-8 class 一、選擇題(32分) 1、python不支持的數據類型有:(A)   A、char  B、int  C、float  D、list 2、x = “foo” y = 2

19道小米網運維工程師筆試

小米 運維題目1:有一百個圖片文件,它們的地址都是http://down.xiaomi.com/img/1.pnghttp://down.xiaomi.com/img/2.png…一直到http://down.xiaomi.com/img/100.png批量下載這100個圖片文件,並找出其中大於500KB的文

JS 計時器參數剖析與

1-1 inter 兩個 性問題 img 創建 not htm 微笑 JS 計時器參數剖析與真題 HTML5學堂-碼匠:計時器的第一個參數,包含幾種不同的書寫方法,可以是函數名,匿名函數,JS代碼字符串,還有一些面試題當中會出現“函數調用”的書寫方式。 那麽,這些不同的書寫