#include <iostream>
#include <algorithm>
using namespace std;
#define MAX_CARS 50000
bool endFlag = false;
void sortpair(int& c1, int& c2){
if (c1 > c2){
int tmp = c1;
c1 = c2;
c2 = tmp;
}
}
class car{
public:
int px1,py1,px2,py2; // poczatkowe
int x1,y1,x2,y2; // koncowe
static bool endFlag;
bool operator<(const car& right)const{
if (px1 != right.px1){
return px1 < right.px1;
}
return py1 < right.py1;
}
bool operator>(const car& right)const{
if (x1 != right.x1){
return x1>right.x1;
}
return y1>right.y1;
}
int getW(){
return y2 - y1;
}
void normalize(){
sortpair(x1, x2);
sortpair(px1, px2);
sortpair(y1, y2);
sortpair(py1, py2);
}
};
car cars[MAX_CARS];
bool insertionSort(car* A, int n, int w){
for (int i = 1; i<n; i++){
car key = A[i];
int j;
for (j = i - 1; j >= 0 && A[j]>key; j--){
if (A[j].getW() + key.getW() > w){
return false;
}
if (A[j].x1 < key.x2 && A[j].y1 < key.y2 && A[j].y2 > key.y1){
return false;
}
A[j + 1] = A[j];
}
A[j + 1] = key;
}
return true;
}
int main(){
int t,n,w;
cin.sync_with_stdio(false);
cin >> t;
for(int ti=0;ti<t;ti++){
cin >> n >> w;
for(int i=0;i<n;i++){
cin >> cars[i].px1 >> cars[i].py1 >> cars[i].px2 >> cars[i].py2;
}
for(int i=0;i<n;i++){
cin >> cars[i].x1 >> cars[i].y1 >> cars[i].x2 >> cars[i].y2;
cars[i].normalize();
}
sort(cars,cars+n);
if (insertionSort(cars, n, w)){
cout << "TAK" << endl;
}
else{
cout << "NIE" << endl;
}
}
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 | #include <iostream> #include <algorithm> using namespace std; #define MAX_CARS 50000 bool endFlag = false; void sortpair(int& c1, int& c2){ if (c1 > c2){ int tmp = c1; c1 = c2; c2 = tmp; } } class car{ public: int px1,py1,px2,py2; // poczatkowe int x1,y1,x2,y2; // koncowe static bool endFlag; bool operator<(const car& right)const{ if (px1 != right.px1){ return px1 < right.px1; } return py1 < right.py1; } bool operator>(const car& right)const{ if (x1 != right.x1){ return x1>right.x1; } return y1>right.y1; } int getW(){ return y2 - y1; } void normalize(){ sortpair(x1, x2); sortpair(px1, px2); sortpair(y1, y2); sortpair(py1, py2); } }; car cars[MAX_CARS]; bool insertionSort(car* A, int n, int w){ for (int i = 1; i<n; i++){ car key = A[i]; int j; for (j = i - 1; j >= 0 && A[j]>key; j--){ if (A[j].getW() + key.getW() > w){ return false; } if (A[j].x1 < key.x2 && A[j].y1 < key.y2 && A[j].y2 > key.y1){ return false; } A[j + 1] = A[j]; } A[j + 1] = key; } return true; } int main(){ int t,n,w; cin.sync_with_stdio(false); cin >> t; for(int ti=0;ti<t;ti++){ cin >> n >> w; for(int i=0;i<n;i++){ cin >> cars[i].px1 >> cars[i].py1 >> cars[i].px2 >> cars[i].py2; } for(int i=0;i<n;i++){ cin >> cars[i].x1 >> cars[i].y1 >> cars[i].x2 >> cars[i].y2; cars[i].normalize(); } sort(cars,cars+n); if (insertionSort(cars, n, w)){ cout << "TAK" << endl; } else{ cout << "NIE" << endl; } } return 0; } |
English