給定數個服務台的一維座標 arr[n]
及基地台個數 k
,輸出基地台最小直徑為何?
(所有基地台服務直徑相等)
<=k
且直徑最小
sort(v.begin(), v.end());
while (dl != dr - 1) {
int x, tmp = v[0];
for (x = 0; x < p; x++) {
tmp += dm;
if (tmp >= v[v.size() - 1])
{ans = dm, dr = dm; break;}
tmp = *upper_bound(v.begin(), v.end(), tmp);
}
if (x == p) dl = dm;
dm = (dl + dr) >> 1;
if (dm == 1) dl = 0;
}
cout << ans << '\n';
return 0;
}
給定二維座標點集
struct dot {
int x, y, pos;
bool operator<(dot d) {return ((x < d.x) || (x == d.x && y < d.y)
||(x == d.x && y == d.y && pos < d.pos));}
};
void merge_sort(vector<dot>& v, vector<int>& time) {
if (v.size() != 1) {
merge_sort(left, time), merge_sort(right, time);
size_t l = 0, r = 0, x = 0;
while (l != left.size() && r != right.size()) {
if (left[l].y > right[r].y ||
(left[l].y == right[r].y && left[l].x < right[r].x)) {
v[x] = left[l], l++;
time[v[x].pos] += r;
}
else
v[x] = right[r], r++;
x++;
}
while (l != left.size()) v[x] = left[l], l++,
time[v[x].pos] += r, x++;
while (r != right.size()) v[x] = right[r], r++, x++;
}
else return;
}
int main(){
for (int x = 0; x < n; x++) cin>>v[x].x>>v[x].y,v[x].pos = x;
sort(v.begin(), v.end());
vector<int> time(n, 0);
for (int x = n - 1; x >= 0; x--) {
if (tmp != v[x].x) tmp = v[x].x, cnt = 0;
else cnt++, time[v[x].pos] -= cnt;
}
merge_sort(v, time);
for (auto&i : time) cout << i << '\n';
return 0;
}
前言 Intro 學習原因、創作理念 演算法 Algorithm 線段樹 Segment tree 1 線段樹 Segment tree 2 線段樹 Segment tree 3 樹狀數組 Binary Index Tree (BIT)
Jun 7, 2022a648:A. 完美曲線 tag: math、sort 這題給定的是 x 對 y 的函數, 因此第一步先把點依照 x 座標排序, 之後由小到大遍歷全部的點, 一次比較三個點的大小, 如果中間的比較小, 則完美度 $+1$, 如果中間的比較大,
Jul 24, 2021Information Time: 2021/07/23 20:00 - 2021/07/23 22:30 (GMT+8) Duration: 150 minutes Problem count: 5 Language: Chinese(Traditional) Author: tree~, revcoding
Jul 23, 2021簡介 在C++中是一個類別 (class) 雖然在 #include<iostream> 時就可以使用大部分的功能,但避免踩雷,使用時建議打上 #include<string>。 宣告方式 string str; //這是空字串 string str2 = "tree"; string str3(9, 'A'); //AAAAAAAAA string str4[10]; //由字串組成,長度10的陣列
Mar 12, 2021or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up