飛彈攔截【難度:noip d1t2】平面內兩飛彈攔截系統,位置固定,各可攔截以其位置為圓心之一圓形區域,但半徑可調整。今攔截模擬。一道普及題百思不得,題解見證我的無知。n n
個座標已知之飛彈,求兩攔截半徑平方和之最小值.
系統甲必有一攔截範圍。其內部點由甲攔截,故甲之範圍為此點至甲距離最大值;外部由乙攔截同理。故必有一點為兩者分界,至甲距離<=
此則歸甲,否則歸乙。
故我們以至甲距離為關鍵字排序,對各點i
,d1[i]
為[1..i]
至甲距離平方之最大值,d2[i]
為[i..n]
至乙距離平方之最大值,若以i
分界,則平方和為d1[i] + d2[i + 1]
,故最終答案為min
.
#include
#include
#include
#include
typedef
std::pair bint;
const
int maxn = 100001;
int n, d1[maxn], d2[maxn], ans = 0x7fffffff; bint p1, p2, p[maxn];
inline
int dst(bint u, bint v)
int main() );
for(int i = 0; i < n; i++) d1[i] = std::max(d1[i - 1], dst(p[i], p1));
for(int i = n - 1; ~i; i--) d2[i] = std::max(d2[i + 1], dst(p[i], p2));
for(int i = 0; i < n; i++) ans = std::min(ans, d1[i] + d2[i + 1]);
return !printf("%d\n", ans);
}
Leetcode千題 1 兩數之和
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,陣列中同乙個元素不能使用兩遍。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 7 9...
LeetCode 每日 1 題 打卡刷題計畫
活動頁面 佇列 隊首出,隊尾進 先進先出 queue 的基本操作有 q.push x 隊尾 d.push back x 隊尾 d.push front x 隊首 q.pop d.pop back d.pop front struct listnode vector操作push back 在陣列的最後...
LeetCode C 刷題計畫 1 兩數之和
author csu張揚 email csuzhangyang gmail.com or csuzhangyang qq.com 給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找 出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你...