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 <stdio.h>
#include <stdlib.h>

#define NAJW_POJAZDOW 50 ## 000

struct pojazd {
	int xp, xk, wysokosc;
};

int rosnaco(const void *a, const void *b)
{
	return ((struct pojazd*)a)->wysokosc - ((struct pojazd*)b)->wysokosc;
}

int main()
{
	struct pojazd tbl[NAJW_POJAZDOW];
	int testow, pojazdow, wysokosc, i, j, x1, x2, y1, y2;
	const char *wynik;

	scanf("%d", &testow);

	while (testow--)
	{
		scanf("%d %d", &pojazdow, &wysokosc);
		for (i=0;i<pojazdow;++i)
		{
			scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
			tbl[i].xp = x1<x2? x1: x2;
			tbl[i].wysokosc = y1>y2? y1-y2: y2-y1;
		}
		for (i=0;i<pojazdow;++i)
		{
			scanf("%d %*d %d %*d", &x1, &x2);
			tbl[i].xk = x1<x2? x1: x2;
		}

		qsort(tbl, pojazdow, sizeof *tbl, rosnaco);

		wynik = "TAK";

		for (i=0;i<pojazdow;++i)
		{
			for (j=pojazdow-1;j>i;--j)
			{
				if (tbl[i].wysokosc + tbl[j].wysokosc <= wysokosc)
					break;
				else if ((tbl[i].xp < tbl[j].xp) != (tbl[i].xk < tbl[j].xk))
				{
					wynik = "NIE";
					goto odpowiedz;
				}

			}
		}

		odpowiedz:
		puts(wynik);
	}

	return 0;
}