#include<stdio.h>
#include<stdlib.h>
// Helper definition
#define VAR(v, i) __typeof(i) v=(i)
#define FOR(i, j, k) for (int i = (j); i <= (k); ++i)
#define FORD(i, j, k)for (int i=(j); i >= (k); --i)
#define FORE(i, c) for(VAR(i, (c).begin()); i != (c).end(); ++i)
#define REP(i, n) for(int i = 0;i <(n); ++i)
#define TRUE "TAK"
#define FALSE "NIE"
/** Structure that define one offer by the store
*/
struct offer
{
unsigned int w1;
unsigned int w2;
unsigned int h1;
unsigned int h2;
void operator=(const int value);
void operator=(const offer &r);
};
inline void offer::operator=(const int value)
{
w1 = value;
w2 = value;
h1 = value;
h2 = value;
}
inline void offer::operator=(const offer &r)
{
w1 = r.w1;
w2 = r.w2;
h1 = r.h1;
h2 = r.h2;
}
inline bool operator==(const offer &l, const offer &r)
{
return l.w1 == r.w1 && l.w2 == r.w2 &&
l.h1 == r.h1 && l.h2 == r.h2;
}
inline void operator+=(offer &l, const offer &r)
{
if (l.w1 > r.w1)
l.w1 = r.w1;
if (l.w2 < r.w2)
l.w2 = r.w2;
if (l.h1 > r.h1)
l.h1 = r.h1;
if (l.h2 < r.h2)
l.h2 = r.h2;
}
inline void operator*=(offer &l, const offer &r)
{
if (l.w1 >= r.w1 && l.w2 <= r.w2 && l.h1 >= r.h1 && l.h2 <= r.h2)
l = r;
}
int main(int argc, char **argv)
{
unsigned int test;
unsigned int offers;
offer cover;
offer best;
offer temp;
scanf("%d", &test);
REP(i, test)
{
// Reset variable
cover = 0;
best = 0;
// Read number of offers
scanf("%d", &offers);
scanf("%d %d %d %d", &best.w1, &best.w2, &best.h1, &best.h2);
cover = best;
REP(j, offers - 1)
{
scanf("%d %d %d %d", &temp.w1, &temp.w2, &temp.h1, &temp.h2);
best += temp;
cover*= temp;
}
if (cover == best)
printf("%s\n", TRUE);
else
printf("%s\n", FALSE);
}
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 102 103 | #include<stdio.h> #include<stdlib.h> // Helper definition #define VAR(v, i) __typeof(i) v=(i) #define FOR(i, j, k) for (int i = (j); i <= (k); ++i) #define FORD(i, j, k)for (int i=(j); i >= (k); --i) #define FORE(i, c) for(VAR(i, (c).begin()); i != (c).end(); ++i) #define REP(i, n) for(int i = 0;i <(n); ++i) #define TRUE "TAK" #define FALSE "NIE" /** Structure that define one offer by the store */ struct offer { unsigned int w1; unsigned int w2; unsigned int h1; unsigned int h2; void operator=(const int value); void operator=(const offer &r); }; inline void offer::operator=(const int value) { w1 = value; w2 = value; h1 = value; h2 = value; } inline void offer::operator=(const offer &r) { w1 = r.w1; w2 = r.w2; h1 = r.h1; h2 = r.h2; } inline bool operator==(const offer &l, const offer &r) { return l.w1 == r.w1 && l.w2 == r.w2 && l.h1 == r.h1 && l.h2 == r.h2; } inline void operator+=(offer &l, const offer &r) { if (l.w1 > r.w1) l.w1 = r.w1; if (l.w2 < r.w2) l.w2 = r.w2; if (l.h1 > r.h1) l.h1 = r.h1; if (l.h2 < r.h2) l.h2 = r.h2; } inline void operator*=(offer &l, const offer &r) { if (l.w1 >= r.w1 && l.w2 <= r.w2 && l.h1 >= r.h1 && l.h2 <= r.h2) l = r; } int main(int argc, char **argv) { unsigned int test; unsigned int offers; offer cover; offer best; offer temp; scanf("%d", &test); REP(i, test) { // Reset variable cover = 0; best = 0; // Read number of offers scanf("%d", &offers); scanf("%d %d %d %d", &best.w1, &best.w2, &best.h1, &best.h2); cover = best; REP(j, offers - 1) { scanf("%d %d %d %d", &temp.w1, &temp.w2, &temp.h1, &temp.h2); best += temp; cover*= temp; } if (cover == best) printf("%s\n", TRUE); else printf("%s\n", FALSE); } return 0; } |
polski