#include <cstdio> #include <algorithm> #include <vector> using namespace std; struct samochod { int x1; int y1; int x2; int y2; int num; bool operator() (const samochod a, const samochod b) { if (a.x1 > b.x1) return false; if (a.x1 < b.x1) return true; return a.y1 < b.y1; } }; const int ROZM = 50009; typedef pair<int,int> para; vector<samochod> sam, sam2; vector<para> pary; int test, n, wys, a,b,c,d, poz[ROZM]; int main() { scanf("%d",&test); for (int j = 0; j < test; j++) { int pom = 0; scanf("%d%d",&n,&wys); for (int i = 1; i <= n; i++) { scanf("%d%d%d%d",&a,&b,&c,&d); samochod z = {a,b,c,d,i}; sam.push_back(z); } sort(sam.begin(),sam.end(),samochod()); for (int i = 1; i <= n; i++) { scanf("%d%d%d%d",&a,&b,&c,&d); samochod z = {a,b,c,d,i}; sam2.push_back(z); } sort(sam2.begin(),sam2.end(),samochod()); //for (int i = 0; i < n; i++) // printf("%d %d %d %d %d\n", sam[i].x1, sam[i].y1, sam[i].x2, sam[i].y2, sam[i].num); // OKEJ for (int i = 0; i < n; i++) { int pom = 0; if (sam[i].y2 > sam[i].y1) pom = sam[i].y2 - sam[i].y1; else pom = sam[i].y1 - sam[i].y2; for (int j = 0; j < i; j++) { if (wys < pom + (sam[j].y2 - sam[j].y1) && sam[j].y2 > sam[j].y1) pary.push_back(para(sam[j].num,sam[i].num)); if (sam[j].y2 < sam[j].y1 && wys < pom + (sam[j].y1 - sam[j].y2)) pary.push_back(para(sam[j].num,sam[i].num)); } for (int j = i + 1; j < n; j++) { if (wys < pom + (sam[j].y2 - sam[j].y1) && sam[j].y2 > sam[j].y1) pary.push_back(para(sam[i].num,sam[j].num)); if (sam[j].y2 < sam[j].y1 && wys < pom + (sam[j].y1 - sam[j].y2)) pary.push_back(para(sam[i].num,sam[j].num)); } } //for (int i = 0; i < pary.size(); i++) // printf("%d %d\n",pary[i].first, pary[i].second); //scanf("%d ",&a); for (int i = 0; i < n; i++) poz[sam2[i].num] = i; for (int i = 0; i < pary.size(); i++) { if (poz[pary[i].first] > poz[pary[i].second]) { printf("NIE\n"); pom = 1; break; } } if (pom == 0) printf("TAK\n"); pom = 0; pary.resize(0); sam.resize(0); sam2.resize(0); } return 0; }
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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | #include <cstdio> #include <algorithm> #include <vector> using namespace std; struct samochod { int x1; int y1; int x2; int y2; int num; bool operator() (const samochod a, const samochod b) { if (a.x1 > b.x1) return false; if (a.x1 < b.x1) return true; return a.y1 < b.y1; } }; const int ROZM = 50009; typedef pair<int,int> para; vector<samochod> sam, sam2; vector<para> pary; int test, n, wys, a,b,c,d, poz[ROZM]; int main() { scanf("%d",&test); for (int j = 0; j < test; j++) { int pom = 0; scanf("%d%d",&n,&wys); for (int i = 1; i <= n; i++) { scanf("%d%d%d%d",&a,&b,&c,&d); samochod z = {a,b,c,d,i}; sam.push_back(z); } sort(sam.begin(),sam.end(),samochod()); for (int i = 1; i <= n; i++) { scanf("%d%d%d%d",&a,&b,&c,&d); samochod z = {a,b,c,d,i}; sam2.push_back(z); } sort(sam2.begin(),sam2.end(),samochod()); //for (int i = 0; i < n; i++) // printf("%d %d %d %d %d\n", sam[i].x1, sam[i].y1, sam[i].x2, sam[i].y2, sam[i].num); // OKEJ for (int i = 0; i < n; i++) { int pom = 0; if (sam[i].y2 > sam[i].y1) pom = sam[i].y2 - sam[i].y1; else pom = sam[i].y1 - sam[i].y2; for (int j = 0; j < i; j++) { if (wys < pom + (sam[j].y2 - sam[j].y1) && sam[j].y2 > sam[j].y1) pary.push_back(para(sam[j].num,sam[i].num)); if (sam[j].y2 < sam[j].y1 && wys < pom + (sam[j].y1 - sam[j].y2)) pary.push_back(para(sam[j].num,sam[i].num)); } for (int j = i + 1; j < n; j++) { if (wys < pom + (sam[j].y2 - sam[j].y1) && sam[j].y2 > sam[j].y1) pary.push_back(para(sam[i].num,sam[j].num)); if (sam[j].y2 < sam[j].y1 && wys < pom + (sam[j].y1 - sam[j].y2)) pary.push_back(para(sam[i].num,sam[j].num)); } } //for (int i = 0; i < pary.size(); i++) // printf("%d %d\n",pary[i].first, pary[i].second); //scanf("%d ",&a); for (int i = 0; i < n; i++) poz[sam2[i].num] = i; for (int i = 0; i < pary.size(); i++) { if (poz[pary[i].first] > poz[pary[i].second]) { printf("NIE\n"); pom = 1; break; } } if (pom == 0) printf("TAK\n"); pom = 0; pary.resize(0); sam.resize(0); sam2.resize(0); } return 0; } |