[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代碼字符串,還有一些面試題當中會出現“函數調用”的書寫方式。 那麽,這些不同的書寫