#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; } |
English