#include <cstdio> #include <cstdlib> class trawnik { private: unsigned long long dlugosc; unsigned long long dzienkoszenia; int wzrost; long long waga; trawnik *next; trawnik() {} public: trawnik(int gatunek); long long zetnijpole(unsigned long long ilezciac, unsigned long long kiedy); trawnik *idzdalej(); trawnik *idzdalej(int gatunek); void koniecpola(); }; trawnik::trawnik(int gatunek){ wzrost = gatunek; dlugosc = 0; dzienkoszenia = 0; } trawnik *trawnik::idzdalej() { return next; } trawnik *trawnik::idzdalej(int gatunek) { next = new trawnik(gatunek); return next; } void trawnik::koniecpola(){ next = NULL; } long long trawnik::zetnijpole(unsigned long long ilezciac, unsigned long long kiedy) { dlugosc += wzrost * kiedy; waga = dlugosc - ilezciac; if (waga > 0) dlugosc -= dlugosc - ilezciac; else waga = 0; return waga; } class dzien { private: dzien *next; public: long long waga; dzien *wazenie(unsigned long long kg) { waga = kg; next = new dzien; return next; } void stop() { waga = -1; } dzien *drukuj(){ printf("%llu\n", waga); return next; } }; int main(void) { int n, m; scanf("%d %d", &n, &m); int gat; trawnik *pole; scanf("%d", &gat); pole = new trawnik(gat); trawnik *czescpola; czescpola = pole; for (int i = 0; i < n - 1; i++) { scanf("%d", &gat); czescpola = czescpola->idzdalej(gat); } czescpola->koniecpola(); unsigned long long koszenie; unsigned long long granica; unsigned long long waga; unsigned long long dzienkoszenia = 0; unsigned long long iloscdni; dzien *pierwszy = new dzien; dzien *kolejny; kolejny = pierwszy; for (long long i = 0; i < m; i++) { scanf("%llu %llu", &koszenie, &granica); iloscdni = koszenie - dzienkoszenia; dzienkoszenia = koszenie; czescpola = pole; waga = 0; do { waga += czescpola->zetnijpole(granica, iloscdni); czescpola = czescpola->idzdalej(); } while ( czescpola != NULL ); kolejny = kolejny->wazenie(waga); } kolejny->stop(); while (pierwszy->waga >= 0) { pierwszy = pierwszy->drukuj(); } 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 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | #include <cstdio> #include <cstdlib> class trawnik { private: unsigned long long dlugosc; unsigned long long dzienkoszenia; int wzrost; long long waga; trawnik *next; trawnik() {} public: trawnik(int gatunek); long long zetnijpole(unsigned long long ilezciac, unsigned long long kiedy); trawnik *idzdalej(); trawnik *idzdalej(int gatunek); void koniecpola(); }; trawnik::trawnik(int gatunek){ wzrost = gatunek; dlugosc = 0; dzienkoszenia = 0; } trawnik *trawnik::idzdalej() { return next; } trawnik *trawnik::idzdalej(int gatunek) { next = new trawnik(gatunek); return next; } void trawnik::koniecpola(){ next = NULL; } long long trawnik::zetnijpole(unsigned long long ilezciac, unsigned long long kiedy) { dlugosc += wzrost * kiedy; waga = dlugosc - ilezciac; if (waga > 0) dlugosc -= dlugosc - ilezciac; else waga = 0; return waga; } class dzien { private: dzien *next; public: long long waga; dzien *wazenie(unsigned long long kg) { waga = kg; next = new dzien; return next; } void stop() { waga = -1; } dzien *drukuj(){ printf("%llu\n", waga); return next; } }; int main(void) { int n, m; scanf("%d %d", &n, &m); int gat; trawnik *pole; scanf("%d", &gat); pole = new trawnik(gat); trawnik *czescpola; czescpola = pole; for (int i = 0; i < n - 1; i++) { scanf("%d", &gat); czescpola = czescpola->idzdalej(gat); } czescpola->koniecpola(); unsigned long long koszenie; unsigned long long granica; unsigned long long waga; unsigned long long dzienkoszenia = 0; unsigned long long iloscdni; dzien *pierwszy = new dzien; dzien *kolejny; kolejny = pierwszy; for (long long i = 0; i < m; i++) { scanf("%llu %llu", &koszenie, &granica); iloscdni = koszenie - dzienkoszenia; dzienkoszenia = koszenie; czescpola = pole; waga = 0; do { waga += czescpola->zetnijpole(granica, iloscdni); czescpola = czescpola->idzdalej(); } while ( czescpola != NULL ); kolejny = kolejny->wazenie(waga); } kolejny->stop(); while (pierwszy->waga >= 0) { pierwszy = pierwszy->drukuj(); } return 0; } |