Niestety, nie byliśmy w stanie w pełni poprawnie wyświetlić tego pliku, ponieważ nie jest zakodowany w UTF-8.
Możesz pobrać ten plik i spróbować otworzyć go samodzielnie.
// Lupus Nocawy 11 XII 2019, PA2019 // http://potyczki.mimuw.edu.pl/ // https://sio2.mimuw.edu.pl/c/pa-2019-1/ // Runda 2 B // Zadanie: HER // Herbata [B] #include <cstdio> #include <algorithm> using namespace std; const int max_n = 100000+2; struct herbata{ int p; // point on the line int l; int a; int b; }; bool compare(herbata &X, herbata &Y){ if(X.p < Y.p) return 1; return 0; } herbata P[2*max_n+2]; void solve(void){ int n; int p=0; scanf("%d ", &n); long long int zerosum = 0; for(int i=0; i<n; ++i){ int l,a,b; scanf("%d %d %d ", &l, &a, &b); zerosum = zerosum + l*(a-b); P[p].p = a; P[p].l = l; P[p].a = a; P[p].b = b; p++; P[p].p = b; P[p].l = l; P[p].a = a; P[p].b = b; p++; } if (zerosum != 0) {printf("NIE\n"); return;} sort(P,P+p,compare); // tworzymy miotle z kubkow (poczatki i konce przedzialow), idziemy od lewej, // w kazdym momencie gromadzimy roznice ciepla w "total", z kubkow ktore maja za duzo/malo. // Uzywamy "total" do oziebiania kubkow ktore potrzebuja oziebienia. // "delta" to ilosc ciepla jaka sie zmienia w pionie miotly w danym kroku. // Sprawdzamy kazdym kroku czy na oziebianie nie bylo potrzebne wiecej ciepla ni� // do tej pory zgromadzilismy (total<0). long long int total=0; int lastp = P[0].p; int delta = P[0].l; if (P[0].a>P[0].b) delta=-delta; for(int i=1; i<p; ++i){ int p = P[i].p; total += delta * (p-lastp); if (total<0) {printf("NIE\n"); return;} int a = P[i].a; int b = P[i].b; int l = P[i].l; if (p==a) delta += l; if (p==b) delta -= l; lastp=p; } //if (total!=0) {printf("NIE\n"); return;} // zerosum does this printf("TAK\n"); return; } int main(void){ int t; scanf("%d ", &t); while(t--) solve(); 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 | // Lupus Nocawy 11 XII 2019, PA2019 // http://potyczki.mimuw.edu.pl/ // https://sio2.mimuw.edu.pl/c/pa-2019-1/ // Runda 2 B // Zadanie: HER // Herbata [B] #include <cstdio> #include <algorithm> using namespace std; const int max_n = 100000+2; struct herbata{ int p; // point on the line int l; int a; int b; }; bool compare(herbata &X, herbata &Y){ if(X.p < Y.p) return 1; return 0; } herbata P[2*max_n+2]; void solve(void){ int n; int p=0; scanf("%d ", &n); long long int zerosum = 0; for(int i=0; i<n; ++i){ int l,a,b; scanf("%d %d %d ", &l, &a, &b); zerosum = zerosum + l*(a-b); P[p].p = a; P[p].l = l; P[p].a = a; P[p].b = b; p++; P[p].p = b; P[p].l = l; P[p].a = a; P[p].b = b; p++; } if (zerosum != 0) {printf("NIE\n"); return;} sort(P,P+p,compare); // tworzymy miotle z kubkow (poczatki i konce przedzialow), idziemy od lewej, // w kazdym momencie gromadzimy roznice ciepla w "total", z kubkow ktore maja za duzo/malo. // Uzywamy "total" do oziebiania kubkow ktore potrzebuja oziebienia. // "delta" to ilosc ciepla jaka sie zmienia w pionie miotly w danym kroku. // Sprawdzamy kazdym kroku czy na oziebianie nie bylo potrzebne wiecej ciepla ni� // do tej pory zgromadzilismy (total<0). long long int total=0; int lastp = P[0].p; int delta = P[0].l; if (P[0].a>P[0].b) delta=-delta; for(int i=1; i<p; ++i){ int p = P[i].p; total += delta * (p-lastp); if (total<0) {printf("NIE\n"); return;} int a = P[i].a; int b = P[i].b; int l = P[i].l; if (p==a) delta += l; if (p==b) delta -= l; lastp=p; } //if (total!=0) {printf("NIE\n"); return;} // zerosum does this printf("TAK\n"); return; } int main(void){ int t; scanf("%d ", &t); while(t--) solve(); return 0; } |