#include <cstdio>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
struct car {
int id;
int x;
int height;
};
bool xcompare(const car& a, const car& b) {
return a.x < b.x;
}
int main() {
int t;
scanf("%d", &t);
while (t--) {
int n, w;
scanf("%d%d", &n, &w);
vector<car> srccars(n), dstcars(n);
for (int i = 0; i < n; ++i) {
int x1, x2, y1, y2;
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
car c = {i, min(x1,x2), max(y1,y2) - min(y1,y2)};
srccars[i] = c;
}
for (int i = 0; i < n; ++i) {
int x1, x2, y1, y2;
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
car c = {i, min(x1, x2), max(y1, y2) - min(y1,y2)};
dstcars[i] = c;
}
sort(srccars.begin(), srccars.end(), xcompare);
sort(dstcars.begin(), dstcars.end(), xcompare);
vector<int> endpos(n);
{
map<int, int> rearmap;
for (int i = 0; i < n; ++i) {
rearmap[srccars[i].id] = i;
srccars[i].id = i;
}
for (int i = 0; i < n; ++i) {
dstcars[i].id = rearmap[dstcars[i].id];
endpos[dstcars[i].id] = i;
}
}
bool fail = false;
for (int i = 0; i < n; ++i) {
const car& thiscar = srccars[i];
int ep = endpos[thiscar.id];
for (int k = ep-1; k >= 0; k--) {
if (i < dstcars[k].id && thiscar.height+dstcars[k].height > w) {
fail = true;
break;
}
}
if (fail)
break;
}
printf("%s\n", fail ? "NIE" : "TAK");
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | #include <cstdio> #include <vector> #include <algorithm> #include <map> using namespace std; struct car { int id; int x; int height; }; bool xcompare(const car& a, const car& b) { return a.x < b.x; } int main() { int t; scanf("%d", &t); while (t--) { int n, w; scanf("%d%d", &n, &w); vector<car> srccars(n), dstcars(n); for (int i = 0; i < n; ++i) { int x1, x2, y1, y2; scanf("%d%d%d%d", &x1, &y1, &x2, &y2); car c = {i, min(x1,x2), max(y1,y2) - min(y1,y2)}; srccars[i] = c; } for (int i = 0; i < n; ++i) { int x1, x2, y1, y2; scanf("%d%d%d%d", &x1, &y1, &x2, &y2); car c = {i, min(x1, x2), max(y1, y2) - min(y1,y2)}; dstcars[i] = c; } sort(srccars.begin(), srccars.end(), xcompare); sort(dstcars.begin(), dstcars.end(), xcompare); vector<int> endpos(n); { map<int, int> rearmap; for (int i = 0; i < n; ++i) { rearmap[srccars[i].id] = i; srccars[i].id = i; } for (int i = 0; i < n; ++i) { dstcars[i].id = rearmap[dstcars[i].id]; endpos[dstcars[i].id] = i; } } bool fail = false; for (int i = 0; i < n; ++i) { const car& thiscar = srccars[i]; int ep = endpos[thiscar.id]; for (int k = ep-1; k >= 0; k--) { if (i < dstcars[k].id && thiscar.height+dstcars[k].height > w) { fail = true; break; } } if (fail) break; } printf("%s\n", fail ? "NIE" : "TAK"); } } |
English