#include <algorithm>
#include <string>
#include <vector>
#include <list>
#include <cctype>
#include <cmath>
#include <iostream>
#include <set>
#include <map>
#include <sstream>
#include <typeinfo>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<ull> vull;
typedef vector<string> vs;
#define SIZE(x) ((int)(x.size()))
#define LET(var, val) typeof(val) var = (val)
#define FOR(k, a, b) for(typeof(a) k = (a); k < (b); ++k)
#define FORR(k, a, b) for(typeof(a) k = (a); k >= (b); --k)
#define REP(x, n) for(int x = 0; x < (n); ++x)
#define ALL(c) (c).begin(), (c).end()
#define FOREACH(i, c) for(LET(i, (c).begin()); i != (c).end(); ++i)
#define PB push_back
#define PF push_front
const int INF = 1000000001;
const double EPS = 10e-9;
const double PI = acos(-1.0);
ostringstream out;
vi min_width;
vi max_width;
vi min_height;
vi max_height;
int dane[100000][4];
int main()
{
ios_base::sync_with_stdio(0);
int t;
cin >> t;
while(t--)
{
min_height.clear();
max_height.clear();
min_width.clear();
max_width.clear();
int n;
cin >> n;
int min_w = INF, min_h = INF, max_w = 0, max_h = 0;
REP(i, n)
{
cin >> dane[i][0] >> dane[i][1] >> dane[i][2] >> dane[i][3];
if (dane[i][0] < min_w) min_w = dane[i][0];
if (dane[i][1] > max_w) max_w = dane[i][1];
if (dane[i][2] < min_h) min_h = dane[i][2];
if (dane[i][3] > max_h) max_h = dane[i][3];
}
REP(i, n)
{
if (dane[i][0] == min_w) min_width.PB(i);
if (dane[i][1] == max_w) max_width.PB(i);
if (dane[i][2] == min_h) min_height.PB(i);
if (dane[i][3] == max_h) max_height.PB(i);
}
bool was = false;
LET(i, min_width.begin());
LET(j, max_width.begin());
LET(k, min_height.begin());
LET(l, max_height.begin());
while (i != min_width.end() && j != max_width.end() && k != min_height.end() && l != max_height.end())
{
int minimum = min(min(*i, *j), min(*k, *l));
if (*i == *j && *k == *l && *i == *k)
{
was = true;
break;
}
if (*i == minimum) ++i;
if (*j == minimum) ++j;
if (*k == minimum) ++k;
if (*l == minimum) ++l;
}
out << (was ? "TAK\n" : "NIE\n");
}
cout << out.str();
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 | #include <algorithm> #include <string> #include <vector> #include <list> #include <cctype> #include <cmath> #include <iostream> #include <set> #include <map> #include <sstream> #include <typeinfo> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef vector<int> vi; typedef vector<ll> vll; typedef vector<ull> vull; typedef vector<string> vs; #define SIZE(x) ((int)(x.size())) #define LET(var, val) typeof(val) var = (val) #define FOR(k, a, b) for(typeof(a) k = (a); k < (b); ++k) #define FORR(k, a, b) for(typeof(a) k = (a); k >= (b); --k) #define REP(x, n) for(int x = 0; x < (n); ++x) #define ALL(c) (c).begin(), (c).end() #define FOREACH(i, c) for(LET(i, (c).begin()); i != (c).end(); ++i) #define PB push_back #define PF push_front const int INF = 1000000001; const double EPS = 10e-9; const double PI = acos(-1.0); ostringstream out; vi min_width; vi max_width; vi min_height; vi max_height; int dane[100000][4]; int main() { ios_base::sync_with_stdio(0); int t; cin >> t; while(t--) { min_height.clear(); max_height.clear(); min_width.clear(); max_width.clear(); int n; cin >> n; int min_w = INF, min_h = INF, max_w = 0, max_h = 0; REP(i, n) { cin >> dane[i][0] >> dane[i][1] >> dane[i][2] >> dane[i][3]; if (dane[i][0] < min_w) min_w = dane[i][0]; if (dane[i][1] > max_w) max_w = dane[i][1]; if (dane[i][2] < min_h) min_h = dane[i][2]; if (dane[i][3] > max_h) max_h = dane[i][3]; } REP(i, n) { if (dane[i][0] == min_w) min_width.PB(i); if (dane[i][1] == max_w) max_width.PB(i); if (dane[i][2] == min_h) min_height.PB(i); if (dane[i][3] == max_h) max_height.PB(i); } bool was = false; LET(i, min_width.begin()); LET(j, max_width.begin()); LET(k, min_height.begin()); LET(l, max_height.begin()); while (i != min_width.end() && j != max_width.end() && k != min_height.end() && l != max_height.end()) { int minimum = min(min(*i, *j), min(*k, *l)); if (*i == *j && *k == *l && *i == *k) { was = true; break; } if (*i == minimum) ++i; if (*j == minimum) ++j; if (*k == minimum) ++k; if (*l == minimum) ++l; } out << (was ? "TAK\n" : "NIE\n"); } cout << out.str(); return 0; } |
English