이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const int INF = 1'000'000'000;
struct Point {
int x, y;
};
ostream &operator<<(ostream &stream, const Point &p) {
stream << p.x << " " << p.y;
return stream;
}
struct Segment {
int l, r;
Segment() {}
Segment(int l, int r) : l(l), r(r) {}
};
const Segment SEG_ALL = {1, INF};
void self_intersect(Segment &a, const Segment &b) {
a.l = max(a.l, b.l);
a.r = min(a.r, b.r);
}
Segment intersect(Segment a, const Segment &b) {
self_intersect(a, b);
return a;
}
bool inside(int x, const Segment &s) {
return x >= s.l && x <= s.r;
}
struct Rectangle {
Segment x, y;
Rectangle() {}
Rectangle(const Segment &x, const Segment &y) : x(x), y(y) {}
};
const Rectangle RECT_ALL = {SEG_ALL, SEG_ALL};
istream &operator>>(istream &stream, Rectangle &r) {
stream >> r.x.l >> r.y.l >> r.x.r >> r.y.r;
return stream;
}
void self_intersect(Rectangle &a, const Rectangle &b) {
self_intersect(a.x, b.x);
self_intersect(a.y, b.y);
}
Rectangle intersect(Rectangle a, const Rectangle &b) {
self_intersect(a, b);
return a;
}
bool inside(const Point &p, const Rectangle &r) {
return inside(p.x, r.x) && inside(p.y, r.y);
}
int k;
void solve(const vector<Rectangle> &rectangles, const vector<Point> &points) {
if ((int)points.size() == k) {
if (rectangles.empty()) {
for (int i = 0; i < k; ++i) {
cout << points[i] << "\n";
}
exit(0);
}
return;
}
Rectangle intersection = RECT_ALL;
for (const auto &rect : rectangles) {
self_intersect(intersection, rect);
}
for (int x : {intersection.x.l, intersection.x.r}) {
for (int y : {intersection.y.l, intersection.y.r}) {
Point p = {x, y};
auto new_points = points;
new_points.push_back(p);
vector<Rectangle> new_rectangles;
for (const auto &rect : rectangles) {
if (!inside(p, rect)) {
new_rectangles.push_back(rect);
}
}
solve(new_rectangles, new_points);
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n;
cin >> n >> k;
vector<Rectangle> rectangles(n);
for (auto &rect : rectangles) {
cin >> rect;
}
solve(rectangles, vector<Point>{});
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |