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
#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
struct jp{
	int a, b, c, d;		//a-poczatek   b-koniec   c-dlugosc   d-ile moge poczekac
};
jp t[1000];
pair<int,int>pom[1000];
int n, m, ip, hh, maxi;
bool basaur;
bool operator <(jp x, jp y)
{
	if(x.a==y.a)return x.b<y.b;
	return x.a<y.a;
}
int main()
{
	scanf("%d%d", &n, &m);
	if(m>=n){printf("TAK\n"); return 0;}
	for(int i=1; i<=n; i++)
	{
		scanf("%d%d%d", &t[i].a, &t[i].b, &t[i].c);
		t[i].d=t[i].b-t[i].a-t[i].c;
		if(maxi<t[i].b)maxi=t[i].b;
		//printf("%d %d %d %d\n", t[i].a, t[i].b, t[i].c, t[i].d);
	}
	sort(t+1, t+n+1);
	reverse(t+1, t+n+1);
	for(int i=0; i<=maxi; i++)
	{
		ip=0;
		for(int j=1; j<=n; j++)if(t[j].a<=i&&t[j].b>i&&t[j].c>0){ip++; pom[ip]=make_pair(t[j].d, j);}
		if(ip==0)continue;
		if(ip<=m)
		{
			for(int j=1; j<=ip; j++)
			{
				t[pom[j].second].c--;
			}
		}
		else
		{
			sort(pom+1, pom+ip+1);
			for(int j=1; j<=m; j++)t[pom[j].second].c--;
			for(int j=m+1; j<=ip; j++)t[pom[j].second].d--;
			if(t[pom[m+1].second].d<0){printf("NIE\n"); return 0;}
		}
	}
	printf("TAK\n");
	return 0;
}