time limit: 5 sec memory limit: 162 mb
submit: 1462 solved: 503
[submit][status][discuss]
在設計航線的時候,安全是乙個很重要的問題。首先,最重要的是應採取一切措施確保飛行不會發生任何事故
,但同時也需要做好最壞的打算,一旦事故發生,就要確保乘客有盡量高的生還機率。當飛機迫降到海上的時候,
最近的陸地就是乙個關鍵的因素。航線中最危險的地方就是距離最近的陸地最遠的地方,我們稱這種點為這條航線
「孤地點」。孤地點到最近陸地的距離被稱為「孤地距離」。作為航空公司的高階顧問,你接受的第乙個任務就是
盡量找出一條航線的孤地點,並計算這條航線的孤地距離。為了簡化問題,我們認為地圖是乙個二維平面,陸地可
以用多邊形近似,飛行線路為一條折線。航線的起點和終點都在陸地上,但中間的轉折點是可能在海上(如下圖所
示,方格標示出了孤地點)。
輸入的第一行包括兩個整數c和n(1≤c≤20,2≤n≤20),分別代表陸地的數目的航線的轉折點的數目。接下
來有n行,每行有兩個整數x,y。(x,y)表示乙個航線轉折點的座標,第乙個轉折點為航線的起點,最後乙個轉折點
為航線的終點。接下來的輸入將用來描述c塊大陸。每塊輸入由乙個正整數m開始(m≤30),m表示多邊形的頂點個
數,接下來的m行,每行會包含兩個整數x,y,(x,y)表示多邊形的乙個頂點座標,我們保證這些頂點以順時針或逆
時針給出了該多邊形的閉包,不會出現某些邊相交的情況。此外我們也保證輸入資料中任何兩塊大陸不會相交。輸
入的所有座標將保證在-10000到10000的範圍之間。
輸出乙個浮點數,表示航線的孤地距離,資料保留2位小數。
1 2-9 -6
5 13
0 16
-16 -12
17 -6
0.00
nwerc 2007
思路:用個佇列儲存所有要處理的線段。對每截線段分別求出端點s距多邊形的最近點a和t的最近點b,用sa和tb更新答案,在s、t之間找到p使得pa = pb,易知st上所有點對答案的貢獻都不超過pa,由此在此處剪枝。
如剪不掉,將兩截子線段都加入佇列中。
**:
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #includeview code8 #include 9 #include 10 #include 11 #include 12 #include 13 #include
14 #include 15 #include 16 #include 17 #include 18 #include 19 #include 20 #include 21
22using
namespace
std;
2324
#define pau system("pause")
25#define ll long long
26#define pii pair27
#define pb push_back
28#define pli pair29
#define pil pair30
#define clr(a, x) memset(a, x, sizeof(a))
3132
const
double pi = acos(-1.0
);33
const
int inf = 0x3f3f3f3f;34
const
int mod = 1e9 + 7;35
const
double eps = 1e-9;36
37/*
38#include
39#include
40using namespace __gnu_pbds;
41#define tree tree, rb_tree_tag, tree_order_statistics_node_update>
42tree t;
43*/
4445
int sgn(double x)
46struct
point
49 point (double x, double
y) : x(x), y(y) {}
50 point operator + (const point &p) const
51 point operator - (const point &p) const
52 point operator * (const
double &k) const
53 point operator / (const
double &k) const
54double
operator ^ (const point &p) const
55double
operator | (const point &p) const
56bool
operator
< (const point &p) const
57double len2()
58double len()
59void input()
60void output()
61 } p[205
];62
#define pdp pair63
struct
line
66line (point s, point e) : s(s), e(e) {}
67 point operator & (const line &l) const
72bool
operator | (const point &p) const
78pdp dis(point p) else
else88}
89}
90double
len()
93 } l[205
];94
struct
state
99};
100struct
pol
109return res /s;
110}
111bool
hasp(point p)
123return
f;124
}125
pdp dis(point p)
132return
res;
133}
134void
input()
139for (int i = 1; i <= n; ++i)
142}
143 } pol[22
];144
intc, n;
145double
ans;
146void
solve()
151while
(que.size())
163 td =pol[i].dis(e);
164if (td.first
168}
169 ans =max(ans, max(ds, de));
170double sta = 0, en = 1
, mi;
171point tp;
172while (sta <= en -eps) else
181}
182if ((tp - a).len() < ans) continue
;183
que.push(line(s, tp));
184que.push(line(e, tp));
185}
186}
187int
main()
192for (int i = 1; i < n; ++i)
195for (int i = 1; i <= c; ++i)
198solve();
199 printf("
%.2f\n
", ans);
200return0;
201 }
1020 電梯公升降
時間限制 1 秒 記憶體限制 32 兆 特殊判題 否 提交 61 解決 32 某城市最高的建築只有一部電梯。乙份電梯公升降任務表由n個正整數組成,這些數字表示電梯按照給定的順序停留的樓層號。電梯公升一層花費6秒鐘,降一層花費4秒鐘,並且每次停留花費5秒鐘。對於每乙份任務表,你要計算出完成全部公升降任...
學習日誌(10 20)
今天主要講了linux中常用到的三大工具 編輯器vim 編譯器gcc 偵錯程式gdb 1.vim vim有三種模式 命令模式 只能移動游標,不能輸入。剛開啟檔案時進入的就是命令模式 插入模式 在命令模式下按a或i即可進入。底行模式 在命令模式下按 或 進入。命令模式下快捷鍵 x 刪除字元 數字x 刪...
10 20訓練總結
這幾天的話,並差集基本完事了,發現之前的有很多都是做過的題目,還有一些題目比較困難的,我放放在做,今天的話,報了乙個牛客網上的比賽,有的題目確實挺簡單的,可能是那個比賽就比較適合我們這種吧,但卻是還是沒什麼比較好的成績,其中就有乙個是有關快速冪的,需要一定推導,但是我沒有推導出來的,以為就是我相像的...