YBTOJ Luogu P1325 雷達安裝

2022-06-13 13:48:12 字數 825 閱讀 8297

有 \(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...