20231224
This commit is contained in:
76
ACMOJ-1072.cpp
Normal file
76
ACMOJ-1072.cpp
Normal file
@ -0,0 +1,76 @@
|
||||
#include <iomanip>
|
||||
#include <iostream>
|
||||
using namespace std;
|
||||
|
||||
class CircleSet {
|
||||
friend istream &operator>>(istream &in, CircleSet &obj);
|
||||
|
||||
private:
|
||||
struct Circle {
|
||||
long long x, y, r;
|
||||
Circle(long long _x = 0, long long _y = 0, long long _r = 0)
|
||||
: x(_x), y(_y), r(_r) {}
|
||||
};
|
||||
int count; // 集合中圆的数目
|
||||
Circle *circles; // 集合中所有圆
|
||||
public:
|
||||
CircleSet(int n) : count(n) {
|
||||
circles = new Circle[n];
|
||||
count = n;
|
||||
}
|
||||
~CircleSet() { delete[] circles; }
|
||||
int operator[](int idx) const noexcept { return circles[idx].r; }
|
||||
bool checkContaining(int p, int q) {
|
||||
if (circles[p].r <= circles[q].r) return false;
|
||||
return (circles[p].x - circles[q].x) * (circles[p].x - circles[q].x) +
|
||||
(circles[p].y - circles[q].y) * (circles[p].y - circles[q].y) <
|
||||
(circles[p].r - circles[q].r) * (circles[p].r - circles[q].r);
|
||||
}
|
||||
int getCircleContainingQ(int q) {
|
||||
int res = -1;
|
||||
for (int p = 0; p < count; p++) {
|
||||
if (!checkContaining(p, q)) continue;
|
||||
if (res == -1)
|
||||
res = circles[p].r;
|
||||
else
|
||||
res = (circles[p].r < res) ? circles[p].r : res;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
};
|
||||
|
||||
istream &operator>>(istream &in, CircleSet &obj) {
|
||||
for (int i = 0; i < obj.count; ++i) {
|
||||
in >> obj.circles[i].x >> obj.circles[i].y >> obj.circles[i].r;
|
||||
}
|
||||
return in;
|
||||
}
|
||||
|
||||
int main() {
|
||||
#ifdef local
|
||||
freopen("pro.in", "r", stdin);
|
||||
#endif
|
||||
int n, m, type;
|
||||
cin >> n >> m;
|
||||
CircleSet set(n);
|
||||
cin >> set; // 输入集合中的所有圆
|
||||
while (m--) {
|
||||
int type, p, q;
|
||||
cin >> type;
|
||||
if (type == 1) {
|
||||
// do nothing
|
||||
} else if (type == 2) {
|
||||
for (int i = 0; i < n; ++i) {
|
||||
cout << set[i] << ' ';
|
||||
}
|
||||
cout << endl;
|
||||
} else if (type == 3) {
|
||||
cin >> p >> q;
|
||||
cout << set.checkContaining(p, q) << endl;
|
||||
} else if (type == 4) {
|
||||
cin >> q;
|
||||
cout << set.getCircleContainingQ(q) << endl;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user