#include <stdio.h>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
int main(){
int t;
scanf("%d", &t);
for(int i=0; i<t; i++){
int n;
scanf("%d", &n);
vector < int >init_tea;
vector < int > target_tea;
map<int, int > liter_init_tea;
map<int, int > liter_target_tea;
int sum_init = 0;
int sum_target = 0;
bool is_p = true;
for(int j=0; j<n; j++){
int l, i, t;
scanf("%d", &l);
scanf("%d", &i);
scanf("%d", &t);
sum_init+=l*i;
sum_target+=l*t;
if( sum_init > sum_target){
sum_init -= sum_target;
sum_target = 0;
}else{
sum_target -= sum_init;
sum_init = 0;
}
if(liter_init_tea[i]==0){
init_tea.push_back(i);
liter_init_tea[i]+=l;
}else{
liter_init_tea[i]+=l;
}
if(liter_target_tea[t]==0){
target_tea.push_back(t);
liter_target_tea[t]+=l;
}else{
liter_target_tea[t]+=l;
}
}
if(sum_init!=sum_target){
is_p=false;
//printf("srednia \n");
}else{
sort(init_tea.begin(),init_tea.end());
sort(target_tea.begin(),target_tea.end());
int front = 0;
while(init_tea[front]==target_tea[front]and liter_init_tea[init_tea[front]] == liter_target_tea[target_tea[front]] and front!=init_tea.size()-1 and front!=target_tea.size()-1){
front++;
}
if(target_tea[front] <init_tea[front] or (target_tea[front]==init_tea[front] and liter_target_tea[target_tea[front]] > liter_init_tea[init_tea[front]])){
is_p = false;
//printf("za zimny docelowy \n");
}else{
int end_i = init_tea.size()-1;
int end_t = target_tea.size()-1;
while(init_tea[end_i]==target_tea[end_t]and liter_init_tea[init_tea[end_i]] == liter_target_tea[target_tea[end_t]] and end_i>0 and end_t>0){
end_i--;
end_t--;
}
if(target_tea[end_t]>init_tea[end_i] or (target_tea[end_t]==init_tea[end_i] and liter_target_tea[target_tea[end_t]] > liter_init_tea[init_tea[end_i]])){
is_p = false;
//printf("za goracy docelowy \n");
}
}
}
if(is_p){
printf("TAK \n");
}else{
printf("NIE \n");
}
}
}
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 <stdio.h> #include<vector> #include<algorithm> #include<map> using namespace std; int main(){ int t; scanf("%d", &t); for(int i=0; i<t; i++){ int n; scanf("%d", &n); vector < int >init_tea; vector < int > target_tea; map<int, int > liter_init_tea; map<int, int > liter_target_tea; int sum_init = 0; int sum_target = 0; bool is_p = true; for(int j=0; j<n; j++){ int l, i, t; scanf("%d", &l); scanf("%d", &i); scanf("%d", &t); sum_init+=l*i; sum_target+=l*t; if( sum_init > sum_target){ sum_init -= sum_target; sum_target = 0; }else{ sum_target -= sum_init; sum_init = 0; } if(liter_init_tea[i]==0){ init_tea.push_back(i); liter_init_tea[i]+=l; }else{ liter_init_tea[i]+=l; } if(liter_target_tea[t]==0){ target_tea.push_back(t); liter_target_tea[t]+=l; }else{ liter_target_tea[t]+=l; } } if(sum_init!=sum_target){ is_p=false; //printf("srednia \n"); }else{ sort(init_tea.begin(),init_tea.end()); sort(target_tea.begin(),target_tea.end()); int front = 0; while(init_tea[front]==target_tea[front]and liter_init_tea[init_tea[front]] == liter_target_tea[target_tea[front]] and front!=init_tea.size()-1 and front!=target_tea.size()-1){ front++; } if(target_tea[front] <init_tea[front] or (target_tea[front]==init_tea[front] and liter_target_tea[target_tea[front]] > liter_init_tea[init_tea[front]])){ is_p = false; //printf("za zimny docelowy \n"); }else{ int end_i = init_tea.size()-1; int end_t = target_tea.size()-1; while(init_tea[end_i]==target_tea[end_t]and liter_init_tea[init_tea[end_i]] == liter_target_tea[target_tea[end_t]] and end_i>0 and end_t>0){ end_i--; end_t--; } if(target_tea[end_t]>init_tea[end_i] or (target_tea[end_t]==init_tea[end_i] and liter_target_tea[target_tea[end_t]] > liter_init_tea[init_tea[end_i]])){ is_p = false; //printf("za goracy docelowy \n"); } } } if(is_p){ printf("TAK \n"); }else{ printf("NIE \n"); } } } |
English