有 \(n\) 個點,第 \(i\) 個點的座標是 \((x_i,y_i)\)。現在要你在 \(x\) 軸上標記若干個位置,使得每個點都能被乙個以被標記位置為圓心,半徑為 \(d\) 的圓覆蓋。求最少標記多少位置。
首先任意一點如果的 \(y\) 座標如果大於 \(d\),那麼肯定覆蓋不到,直接輸出-1
。
接下來考慮用貪心求解這個問題。
容易發現,點 \(i\) 要被覆蓋,被覆蓋的圓的圓心在 \(x\) 軸上,是一段區間,就是說此區間上的每乙個點都能把點 \(i\) 覆蓋。
既然如此,我們列舉點 \(i\) 的區間的右端點作為乙個標記位置,當列舉到下乙個點時,如果此標記位置在當前點區間內,則代表可以直接覆蓋;如果不在,則用當前點的區間右端點作為新的標記位置。
const int n = 1010;
int n, m;
struct interval
a[n];
bool cmp (interval a, interval b)
int main()
a[i].l = x * 1.0 - sqrt(m * m - y * y + 0.0);
a[i].r = x * 1.0 + sqrt(m * m - y * y + 0.0);
} sort (a + 1, a + 1 + n, cmp);
double r = a[1].r;
int ans = 1;
for (int i = 2; i <= n; i++)
printf ("%d", ans);
return 0;
}
1325 星號陣列3
描述 輸出乙個邊長為 m 的正六邊形。輸入 乙個正整數 m 代表正六邊形的邊長。2 m 20 輸出 乙個邊長為 m 的正六邊形,每行最後乙個星號後面沒有空格,最後一行輸出完成以後也要換行。樣例輸入 3樣例輸出 include using namespace std intmain else if i...
luogu P1325 雷達安裝
描述 假設海岸線是一條無限延伸的直線。它的一側是陸地,另一側是海洋。每一座小島是在海面上的乙個點。雷達必須安裝在陸地上 包括海岸線 並且每個雷達都有相同的掃瞄範圍d。你的任務是建立盡量少的雷達站,使所有小島都在掃瞄範圍之內。資料使用笛卡爾座標系,定義海岸線為x軸。在x軸上方為海洋,下方為陸地。樣例1...
P1325 雷達安裝
描述 假設海岸線是一條無限延伸的直線。它的一側是陸地,另一側是海洋。每一座小島是在海面上的乙個點。雷達必須安裝在陸地上 包括海岸線 並且每個雷達都有相同的掃瞄範圍d。你的任務是建立盡量少的雷達站,使所有小島都在掃瞄範圍之內。資料使用笛卡爾座標系,定義海岸線為x軸。在x軸上方為海洋,下方為陸地。樣例1...