#include <iostream> #include <stdio.h> #include <algorithm> #include <vector> #include <limits> using namespace std; class Range{ public: int start, end, height, number; Range(int s, int e, int h, int n):start(s),end(e),height(h),number(n){}; Range(){}; int operator==(const Range &q) {return start==q.start && end==q.end && height==q.height && number==q.number;} }; int main(){ int t; scanf("%d", &t); for (int q=0 ; q<t ; q++){ int n, wp; scanf("%d", &n); scanf("%d", &wp); vector<Range> ranges_1; vector<Range> ranges_2; bool ok = true; for (int i=0 ; i<n ; i++){ int x1, y1, x2, y2; scanf("%d", &x1); scanf("%d", &y1); scanf("%d", &x2); scanf("%d", &y2); ranges_1.push_back(Range(x1, x2, y2-y1, i)); } for (int i=0 ; i<n ; i++){ int x1, y1, x2, y2; scanf("%d", &x1); scanf("%d", &y1); scanf("%d", &x2); scanf("%d", &y2); ranges_2.push_back(Range(x1, x2, y2-y1, i)); } for (int i=0 ; i<n ; i++){ if (!ok) break; Range q = ranges_1[i]; // stara pozycja Range p = ranges_2[i]; // nowa pozycja if (p==q) continue; for (int k=0 ; k<n ; k++){ if(i==k) continue; Range tmp = ranges_1[k]; if ((q.start>=tmp.end && p.start<tmp.end) || (q.end<=tmp.start && p.end>tmp.start)){ Range tmp2 = ranges_2[k]; if ((p.height + tmp.height)>wp){ if (!((q.start>=tmp.end && p.start>=tmp2.end) || (q.end<=tmp.start && p.end<=tmp2.start))){ ok = false; break; } } } } } if (ok) 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 | #include <iostream> #include <stdio.h> #include <algorithm> #include <vector> #include <limits> using namespace std; class Range{ public: int start, end, height, number; Range(int s, int e, int h, int n):start(s),end(e),height(h),number(n){}; Range(){}; int operator==(const Range &q) {return start==q.start && end==q.end && height==q.height && number==q.number;} }; int main(){ int t; scanf("%d", &t); for (int q=0 ; q<t ; q++){ int n, wp; scanf("%d", &n); scanf("%d", &wp); vector<Range> ranges_1; vector<Range> ranges_2; bool ok = true; for (int i=0 ; i<n ; i++){ int x1, y1, x2, y2; scanf("%d", &x1); scanf("%d", &y1); scanf("%d", &x2); scanf("%d", &y2); ranges_1.push_back(Range(x1, x2, y2-y1, i)); } for (int i=0 ; i<n ; i++){ int x1, y1, x2, y2; scanf("%d", &x1); scanf("%d", &y1); scanf("%d", &x2); scanf("%d", &y2); ranges_2.push_back(Range(x1, x2, y2-y1, i)); } for (int i=0 ; i<n ; i++){ if (!ok) break; Range q = ranges_1[i]; // stara pozycja Range p = ranges_2[i]; // nowa pozycja if (p==q) continue; for (int k=0 ; k<n ; k++){ if(i==k) continue; Range tmp = ranges_1[k]; if ((q.start>=tmp.end && p.start<tmp.end) || (q.end<=tmp.start && p.end>tmp.start)){ Range tmp2 = ranges_2[k]; if ((p.height + tmp.height)>wp){ if (!((q.start>=tmp.end && p.start>=tmp2.end) || (q.end<=tmp.start && p.end<=tmp2.start))){ ok = false; break; } } } } } if (ok) printf("TAK\n"); else printf("NIE\n"); } return 0; } |