時間限制:
3000 ms | 記憶體限制:
1000 kb
難度:3
描述
有一寬度為1的折線管道,如圖所示,上面的各個定點為 (x0,y0),(x1,y1),(x2,y2) ……(xn,yn),下面各個定點為(x0,y0-1),(x1,y1-1),(x2,y2-1)……(xn,yn-1),假設管道都是不透明的,不反射的,光線從左邊入口的(x0,y0),(x0,y0-1)之間射入,向四面八方直線傳播,問光線最遠能射到**(x座標)或能穿透整個管道。
輸入
第一行有乙個整數2<=n<20(n為零結束),表示有n個管道,接下來的n行表示n個管道的上面座標(x0,y0),(x1,y1),(x2,y2)……(xn,yn)。測試資料組數大於0小於10000,所有座標的只不大於10000。
輸出如果光線不能穿過管道,輸出最遠的x座標,結果保留兩位小數。如果有光線可以透過管道,輸出「through all the pipe.」
樣例輸入
4
0 1
2 2
4 1
6 4
6
0 1
2 -0.6
5 -4.45
7 -5.57
12 -10.8
17 -16.550樣例輸出
4.67
through all the pipe.
主要的思路就是窮舉所有的折點的組合,取任意兩個折點組成一條線,看看能不能跟所有的管道的上下折點構成的線段相交,如果所有都相交則說明光線能通過,否則求出所有光線中照的最遠的那個(窮舉的過程中設定乙個記錄變數) 這裡就需要計算兩個線段的交點(如果不能穿過管道,就要計算管道壁和光線的交點)。
#include#include#include#include#define e 1e-10
using namespace std;
struct zz
p[25][2];
double judge(zz a,zz b,zz c)//判斷左右方向
double check(zz a1,zz a2,zz b1,zz b2)//判斷是否相交
double zhexian(zz a,zz b,zz c)//計算三角形面積公式
double point(zz a1,zz a2,zz b1,zz b2)//計算交點座標
int main()
}if(j==n)
flag=true;}}
}}
} if(flag==true)
printf("through all the pipe.\n");
else
printf("%.2lf\n",mx);
} return 0;
}
nyoj 7 街區最短路徑問題 數學
找出橫縱座標的中位數,怎麼找 先對x排序找x的中位數x0,再對y排序找y的中位數y0 最後統計各點到中位數點 x0,y0 的總距離 時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 乙個街區有很多住戶,街區的街道只能為東西 南北兩種方向。住戶只可以沿著街道行走。各個街道之間的間...
nyoj 7 街區最短路徑問題 數學
找出橫縱座標的中位數,怎麼找 先對x排序找x的中位數x0,再對y排序找y的中位數y0 最後統計各點到中位數點 x0,y0 的總距離 時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描寫敘述 乙個街區有非常多住戶,街區的街道僅僅能為東西 南北兩種方向。住戶僅僅能夠沿著街道行走。各個街...
NYOJ 7 街區最短路徑問題(數學問題)
時間限制 3000 ms 記憶體限制 65535 kb 難度 4 描述 乙個街區有很多住戶,街區的街道只能為東西 南北兩種方向。住戶只可以沿著街道行走。各個街道之間的間隔相等。用 x,y 來表示住戶坐在的街區。例如 4,20 表示使用者在東西方向第4個街道,南北方向第20個街道。現在要建乙個郵局,使...