#include <iostream> #include <algorithm> #include <vector> #include <stdio.h> using namespace std; int main() { int k; scanf("%d",&k); for (int ik=0; ik<k; ik++) { int n, w; scanf("%d%d",&n,&w); int x1p[n], x2p[n], y1p[n], y2p[n]; int x1k[n], x2k[n], y1k[n], y2k[n]; vector <pair<int,int> > v; for (int i=0; i<n; i++) { scanf("%d%d%d%d",&x1p[i],&y1p[i],&x2p[i],&y2p[i]); if (x1p[i] > x2p[i]) { int pom = x1p[i]; x1p[i] = x2p[i]; x2p[i] = pom; } if (y1p[i] > y2p[i]) { int pom = y1p[i]; y1p[i] = y2p[i]; y2p[i] = pom; } pair<int,int> p; p.first = - (y2p[i] - y1p[i]); //minus zeby posortowalo malejaco //printf("Wys: %d\n",p.first); p.second = i; v.push_back(p); } for (int i=0; i<n; i++) { scanf("%d%d%d%d",&x1k[i],&y1k[i],&x2k[i],&y2k[i]); if (x1k[i] > x2k[i]) { int pom = x1k[i]; x1k[i] = x2k[i]; x2k[i] = pom; } } sort(v.begin(),v.end()); bool isOK = true; for (int i=0; i<n; i++) { int j = i+1; while (j < n && -v[i].first - v[j].first > w) //minusy, bo... patrz wyzej { if ((x1p[v[i].second] >= x2p[v[j].second] && x1k[v[j].second] >= x2k[v[i].second]) || (x1p[v[j].second] >= x2p[v[i].second] && x1k[v[i].second] >= x2k[v[j].second]))//sprawdzic, tu moze byc blad { isOK = false; break; } j++; } if (j == i+1 || !isOK) break; //dwa kolejne maja mniejsza sume wysokosci niz w } if (isOK) printf("TAK\n"); else printf("NIE\n"); } 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 | #include <iostream> #include <algorithm> #include <vector> #include <stdio.h> using namespace std; int main() { int k; scanf("%d",&k); for (int ik=0; ik<k; ik++) { int n, w; scanf("%d%d",&n,&w); int x1p[n], x2p[n], y1p[n], y2p[n]; int x1k[n], x2k[n], y1k[n], y2k[n]; vector <pair<int,int> > v; for (int i=0; i<n; i++) { scanf("%d%d%d%d",&x1p[i],&y1p[i],&x2p[i],&y2p[i]); if (x1p[i] > x2p[i]) { int pom = x1p[i]; x1p[i] = x2p[i]; x2p[i] = pom; } if (y1p[i] > y2p[i]) { int pom = y1p[i]; y1p[i] = y2p[i]; y2p[i] = pom; } pair<int,int> p; p.first = - (y2p[i] - y1p[i]); //minus zeby posortowalo malejaco //printf("Wys: %d\n",p.first); p.second = i; v.push_back(p); } for (int i=0; i<n; i++) { scanf("%d%d%d%d",&x1k[i],&y1k[i],&x2k[i],&y2k[i]); if (x1k[i] > x2k[i]) { int pom = x1k[i]; x1k[i] = x2k[i]; x2k[i] = pom; } } sort(v.begin(),v.end()); bool isOK = true; for (int i=0; i<n; i++) { int j = i+1; while (j < n && -v[i].first - v[j].first > w) //minusy, bo... patrz wyzej { if ((x1p[v[i].second] >= x2p[v[j].second] && x1k[v[j].second] >= x2k[v[i].second]) || (x1p[v[j].second] >= x2p[v[i].second] && x1k[v[i].second] >= x2k[v[j].second]))//sprawdzic, tu moze byc blad { isOK = false; break; } j++; } if (j == i+1 || !isOK) break; //dwa kolejne maja mniejsza sume wysokosci niz w } if (isOK) printf("TAK\n"); else printf("NIE\n"); } return 0; } |