#include <iostream> #include <algorithm> using namespace std; struct Kubeczki{ int rozmiar; int temperatura; bool operator<(const Kubeczki& inny){ return temperatura < inny.temperatura; } }; int main() { ios_base::sync_with_stdio(false); int t = 0, n=0, bilans = 0, iter = 0, poz_rozmiar = 0, ob_temp = 0; bool is_full = false, is_end = false; cin>>t; for(int i=0; i<t; ++i){ cin>>n; int tab[3][n]; Kubeczki k_now[n]; Kubeczki k_new[n]; for(int j=0; j<n; ++j){ cin>>tab[0][j]; cin>>tab[1][j]; cin>>tab[2][j]; k_now[j].rozmiar = tab[0][j]; k_now[j].temperatura = tab[1][j]; k_new[j].rozmiar = tab[0][j]; k_new[j].temperatura = tab[2][j]; } std::sort(&k_now[0], &k_now[n]); std::sort(&k_new[0], &k_new[n]); for(int j=0; j<n; ++j){ is_full = false; poz_rozmiar = k_new[j].rozmiar; while(!is_full){ if(k_now[iter].rozmiar < poz_rozmiar){ ob_temp = (k_now[iter].rozmiar * k_now[iter].temperatura) + ob_temp; poz_rozmiar -= k_now[iter].rozmiar; k_now[iter].rozmiar = 0; iter++; } else{ if(k_now[iter].rozmiar >= poz_rozmiar){ if((k_now[iter].rozmiar - poz_rozmiar) == 0){ ob_temp = ((k_now[iter].rozmiar) * k_now[iter].temperatura) + ob_temp; }else{ ob_temp = (poz_rozmiar * k_now[iter].temperatura) + ob_temp; } k_now[iter].rozmiar -= poz_rozmiar; is_full = true; bilans += k_new[j].temperatura * k_new[j].rozmiar - ob_temp; if(k_now[iter].rozmiar == 0){ iter++; } } } } if(bilans < 0){ is_end = true; } is_full = false; ob_temp = 0; poz_rozmiar = 0; } if(bilans == 0 && is_end == false){ cout<<"TAK"<<endl; }else{ cout<<"NIE"<<endl; } bilans = 0; iter = 0; is_end = 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 | #include <iostream> #include <algorithm> using namespace std; struct Kubeczki{ int rozmiar; int temperatura; bool operator<(const Kubeczki& inny){ return temperatura < inny.temperatura; } }; int main() { ios_base::sync_with_stdio(false); int t = 0, n=0, bilans = 0, iter = 0, poz_rozmiar = 0, ob_temp = 0; bool is_full = false, is_end = false; cin>>t; for(int i=0; i<t; ++i){ cin>>n; int tab[3][n]; Kubeczki k_now[n]; Kubeczki k_new[n]; for(int j=0; j<n; ++j){ cin>>tab[0][j]; cin>>tab[1][j]; cin>>tab[2][j]; k_now[j].rozmiar = tab[0][j]; k_now[j].temperatura = tab[1][j]; k_new[j].rozmiar = tab[0][j]; k_new[j].temperatura = tab[2][j]; } std::sort(&k_now[0], &k_now[n]); std::sort(&k_new[0], &k_new[n]); for(int j=0; j<n; ++j){ is_full = false; poz_rozmiar = k_new[j].rozmiar; while(!is_full){ if(k_now[iter].rozmiar < poz_rozmiar){ ob_temp = (k_now[iter].rozmiar * k_now[iter].temperatura) + ob_temp; poz_rozmiar -= k_now[iter].rozmiar; k_now[iter].rozmiar = 0; iter++; } else{ if(k_now[iter].rozmiar >= poz_rozmiar){ if((k_now[iter].rozmiar - poz_rozmiar) == 0){ ob_temp = ((k_now[iter].rozmiar) * k_now[iter].temperatura) + ob_temp; }else{ ob_temp = (poz_rozmiar * k_now[iter].temperatura) + ob_temp; } k_now[iter].rozmiar -= poz_rozmiar; is_full = true; bilans += k_new[j].temperatura * k_new[j].rozmiar - ob_temp; if(k_now[iter].rozmiar == 0){ iter++; } } } } if(bilans < 0){ is_end = true; } is_full = false; ob_temp = 0; poz_rozmiar = 0; } if(bilans == 0 && is_end == false){ cout<<"TAK"<<endl; }else{ cout<<"NIE"<<endl; } bilans = 0; iter = 0; is_end = false; } return 0; } |