QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#553462 | #7696. Forest for the Trees | stig | AC ✓ | 249ms | 4632kb | C++20 | 3.3kb | 2024-09-08 13:47:45 | 2024-09-08 13:47:45 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
template<typename A, typename B> ostream& operator<<(ostream &os, const pair<A, B> &p) { return os << '(' << p.first << ", " << p.second << ')'; }
template<typename T_container, typename T = typename enable_if<!is_same<T_container, string>::value, typename T_container::value_type>::type> ostream& operator<<(ostream &os, const T_container &v) { os << '{'; string sep; for (const T &x : v) os << sep << x, sep = ", "; return os << '}'; }
void dbg_out() { cerr << endl; }
template<typename Head, typename... Tail> void dbg_out(Head H, Tail... T) { cerr << ' ' << H; dbg_out(T...); }
#ifndef ONLINE_JUDGE
#define dbg(...) cerr << "(" << #__VA_ARGS__ << "):", dbg_out(__VA_ARGS__)
#else
#define dbg(...)
#endif
typedef int uci;
#define int long long
#define ld long double
#define sz(x) ((int)x.size())
#define all(a) (a).begin(), (a).end()
#define f first
#define s second
#define vpi vector<pair<int, int>>
uci main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int nt, ns, rmax;
cin >> nt >> ns >> rmax;
map<int, set<int>> forest;
vector<pair<int, int>> points(nt);
for (auto& x : points) {
cin >> x.f >> x.s;
forest[x.f].insert(x.s);
}
array<vpi, 4> rel = {vpi(ns), vpi(ns), vpi(ns), vpi(ns)};
for (auto& x : rel[0]) {
cin >> x.f >> x.s;
}
// fixed tree is at 0, 0
// rel[0] = robot relative to fixed tree
// rel[1..ns] = other trees relative to 0, 0
for (int i = 1; i < ns; i++) {
rel[0][i].f -= rel[0][0].f;
rel[0][i].s -= rel[0][0].s;
}
rel[0][0].f = -rel[0][0].f;
rel[0][0].s = -rel[0][0].s;
for (int r = 1; r < 4; r++) {
for (int i = 0; i < ns; i++) {
rel[r][i].f = rel[r - 1][i].s;
rel[r][i].s = -rel[r - 1][i].f;
}
}
int found = 0;
int rx, ry;
for (int fix = 0; fix < nt; fix++) {
int fixx = points[fix].f, fixy = points[fix].s;
for (int rot = 0; rot < 4; rot++) {
bool exists = 1;
for (int posi = 1; posi < ns; posi++) {
auto pos = rel[rot][posi];
int testx = fixx + pos.f, testy = fixy + pos.s;
if (!forest.contains(testx) || !forest[testx].contains(testy)) {
exists = 0;
break;
}
}
if (!exists) continue;
int robotx = fixx + rel[rot][0].f, roboty = fixy + rel[rot][0].s;
if (forest[robotx].contains(roboty)) continue;
int inrange{};
for (auto& pt : points) {
if (abs(robotx - pt.f) + abs(roboty - pt.s) <= rmax) {
inrange++;
}
if (inrange > ns) break;
}
if (fix == 2 && rot == 0) {
dbg(inrange);
}
if (inrange == ns) {
found++;
rx = robotx;
ry = roboty;
}
if (found > 1) break;
}
if (found > 1) break;
}
if (found == 0) {
cout << "Impossible\n";
}
else if (found == 1) {
cout << rx << ' ' << ry << '\n';
}
else {
cout << "Ambiguous\n";
}
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3548kb
input:
4 4 100 1 1 2 2 2 1 3 3 0 1 0 2 -1 2 -2 3
output:
0 1
result:
ok single line: '0 1'
Test #2:
score: 0
Accepted
time: 0ms
memory: 3660kb
input:
4 4 4 0 1 1 0 0 -1 -1 0 0 1 1 0 0 -1 -1 0
output:
Ambiguous
result:
ok single line: 'Ambiguous'
Test #3:
score: 0
Accepted
time: 141ms
memory: 3972kb
input:
4899 957 32 -9961 -9999 -9970 -9968 -9942 -9986 -9991 -9991 -9950 -9990 -9958 -9994 -9939 -9944 -9992 -9987 -9973 -9937 -9981 -9941 -9940 -9940 -9989 -9945 -9961 -9963 -9970 -9932 -9969 -9967 -9977 -9971 -9949 -9989 -9958 -9958 -9957 -9993 -9937 -9935 -9938 -9980 -9965 -9997 -9992 -9951 -9946 -9984 ...
output:
-9929 -9959
result:
ok single line: '-9929 -9959'
Test #4:
score: 0
Accepted
time: 248ms
memory: 3888kb
input:
4899 941 40 -9970 -9968 -9942 -9986 -9991 -9991 -9950 -9990 -9958 -9994 -9939 -9944 -9992 -9987 -9973 -9937 -9981 -9941 -9940 -9940 -9989 -9945 -9961 -9963 -9970 -9932 -9969 -9967 -9977 -9971 -9949 -9989 -9958 -9958 -9957 -9993 -9937 -9935 -9938 -9980 -9965 -9997 -9992 -9951 -9946 -9984 -10000 -9955...
output:
Impossible
result:
ok single line: 'Impossible'
Test #5:
score: 0
Accepted
time: 249ms
memory: 3992kb
input:
4899 940 40 -9970 -9968 -9942 -9986 -9991 -9991 -9950 -9990 -9958 -9994 -9939 -9944 -9992 -9987 -9973 -9937 -9981 -9941 -9940 -9940 -9989 -9945 -9961 -9963 -9970 -9932 -9969 -9967 -9977 -9971 -9949 -9989 -9958 -9958 -9957 -9993 -9937 -9935 -9938 -9980 -9965 -9997 -9992 -9951 -9946 -9984 -10000 -9955...
output:
Impossible
result:
ok single line: 'Impossible'
Test #6:
score: 0
Accepted
time: 0ms
memory: 3552kb
input:
3 3 1000 1 0 0 1 1 1 1 0 0 1 1 1
output:
0 0
result:
ok single line: '0 0'
Test #7:
score: 0
Accepted
time: 2ms
memory: 4632kb
input:
5000 2 1000 0 0 1000 1000 66740 84615 -16851 37613 31009 31589 -68041 -71122 21568 86889 53743 -31217 -73472 63365 9594 -12742 -25497 -5264 15942 13442 19537 -83361 93129 67319 -27565 73861 75273 -19266 -55048 -79726 -45975 -36987 -51309 35820 -99049 -10933 -45867 99815 -52121 99729 -89976 -15892 38...
output:
Ambiguous
result:
ok single line: 'Ambiguous'
Test #8:
score: 0
Accepted
time: 3ms
memory: 4368kb
input:
5000 3 1000 0 0 1000 1000 1000 999 13954 9751 75888 -54632 10747 -12901 37707 -37988 -49564 26056 -30528 -9620 6227 -95560 -82768 85135 -15530 89254 -39739 -79664 -81590 -75580 91135 -20238 -52264 -66253 -41259 -90627 -7096 -35158 -67316 13384 79722 57595 -40566 99205 35854 -48598 -83531 -59472 -286...
output:
600 400
result:
ok single line: '600 400'
Test #9:
score: 0
Accepted
time: 0ms
memory: 3868kb
input:
4 3 100 1 1 2 2 2 1 3 3 0 1 0 2 -1 2
output:
Impossible
result:
ok single line: 'Impossible'
Test #10:
score: 0
Accepted
time: 0ms
memory: 3684kb
input:
3 3 100 1 1 2 1 3 1 0 1 0 2 0 3
output:
Ambiguous
result:
ok single line: 'Ambiguous'
Test #11:
score: 0
Accepted
time: 0ms
memory: 3564kb
input:
4 3 2 1 1 2 2 2 1 3 3 0 1 0 2 -1 1
output:
2 0
result:
ok single line: '2 0'
Test #12:
score: 0
Accepted
time: 0ms
memory: 3608kb
input:
121 121 50 4 0 -10 10 8 0 0 -4 -6 10 -8 -8 10 6 2 2 -8 10 -4 -8 6 2 -2 -2 -10 -6 -4 10 4 2 -6 -6 10 -10 8 2 0 -2 -8 -6 2 4 -4 -6 6 4 -2 0 -10 -4 -6 -4 10 -8 8 4 0 0 -8 -4 -4 -4 6 6 -2 2 -10 -2 -6 -2 10 -6 2 -10 0 2 -8 -2 6 -10 -4 -2 4 -10 -2 4 -10 0 8 -10 -6 0 2 -8 -8 0 6 -8 10 8 -4 0 -10 2 8 -8 -6 ...
output:
Ambiguous
result:
ok single line: 'Ambiguous'
Test #13:
score: 0
Accepted
time: 0ms
memory: 3836kb
input:
120 120 50 -10 10 8 0 0 -4 -6 10 -8 -8 10 6 2 2 -8 10 -4 -8 6 2 -2 -2 -10 -6 -4 10 4 2 -6 -6 10 -10 8 2 0 -2 -8 -6 2 4 -4 -6 6 4 -2 0 -10 -4 -6 -4 10 -8 8 4 0 0 -8 -4 -4 -4 6 6 -2 2 -10 -2 -6 -2 10 -6 2 -10 0 2 -8 -2 6 -10 -4 -2 4 -10 -2 4 -10 0 8 -10 -6 0 2 -8 -8 0 6 -8 10 8 -4 0 -10 2 8 -8 -6 2 4 ...
output:
5 5
result:
ok single line: '5 5'
Test #14:
score: 0
Accepted
time: 0ms
memory: 3676kb
input:
120 119 50 -10 10 8 0 0 -4 -6 10 -8 -8 10 6 2 2 -8 10 -4 -8 6 2 -2 -2 -10 -6 -4 10 4 2 -6 -6 10 -10 8 2 0 -2 -8 -6 2 4 -4 -6 6 4 -2 0 -10 -4 -6 -4 10 -8 8 4 0 0 -8 -4 -4 -4 6 6 -2 2 -10 -2 -6 -2 10 -6 2 -10 0 2 -8 -2 6 -10 -4 -2 4 -10 -2 4 -10 0 8 -10 -6 0 2 -8 -8 0 6 -8 10 8 -4 0 -10 2 8 -8 -6 2 4 ...
output:
Impossible
result:
ok single line: 'Impossible'
Test #15:
score: 0
Accepted
time: 0ms
memory: 3608kb
input:
121 121 50 4 0 -10 10 8 0 0 -4 -6 10 -8 -8 10 6 2 2 -8 10 -4 -8 6 2 -2 -2 -10 -6 -4 10 4 2 -6 -6 10 -10 8 2 0 -2 -8 -6 2 4 -4 -6 6 4 -2 0 -10 -4 -6 -4 10 -8 8 4 0 0 -8 -4 -4 -4 6 6 -2 2 -10 -2 -6 -2 10 -6 2 -10 0 2 -8 -2 6 -10 -4 -2 4 -10 -2 4 -10 0 8 -10 -6 0 2 -8 -8 0 6 -8 10 8 -4 0 -10 2 8 -8 -6 ...
output:
Ambiguous
result:
ok single line: 'Ambiguous'
Test #16:
score: 0
Accepted
time: 60ms
memory: 3712kb
input:
2598 217 20 -28 50 -36 46 -16 24 -24 20 50 6 -44 -38 42 2 6 48 -42 8 -50 4 -30 -18 -38 -22 -20 26 -18 -44 -38 14 2 50 -46 10 -18 -8 22 28 -26 -12 14 24 -34 -16 -6 -34 -14 -38 26 -2 -22 -42 18 -6 -4 12 36 48 -12 8 8 -14 48 22 0 -18 18 30 -8 -22 20 -40 12 -44 30 4 4 -48 -8 14 12 -8 4 -12 44 24 24 -34 ...
output:
5 5
result:
ok single line: '5 5'