#include <iostream> using namespace std; long long przytnij_trawe(int &, int, int, int); int main() { int liczba_arow = 0; // 1 : 500 000 int liczba_skoszen = 0; // 1 : 500 000 int pole[500000]; int szybkosc_wzrostu[500000]; // 1 : 1 000 000 long long waga_siana = 0; int poprzedni_dzien = 0; int obecny_dzien = 0; //1 : 10^12 int wysokosc_przyciecia = 0; //1 : 10^12 int poIluDniach = 0; cin >> liczba_arow >> liczba_skoszen; int liczba_gatunkow_trawy = liczba_arow; for(int gatunek_trawy = 0; gatunek_trawy < liczba_gatunkow_trawy; gatunek_trawy++) cin >> szybkosc_wzrostu[gatunek_trawy]; for(int koszenie = 0; koszenie < liczba_skoszen; koszenie++) { waga_siana = 0; cin >> obecny_dzien >> wysokosc_przyciecia; poIluDniach = obecny_dzien - poprzedni_dzien; for(int gatunek_trawy = 0; gatunek_trawy < liczba_gatunkow_trawy; gatunek_trawy++) waga_siana += przytnij_trawe(pole[gatunek_trawy], szybkosc_wzrostu[gatunek_trawy], poIluDniach, wysokosc_przyciecia); cout << waga_siana << endl; poprzedni_dzien = obecny_dzien; } return 0; } long long przytnij_trawe(int& wysokosc_trawy, int szybkosc_wzrostu, int poIluDniach, int wysokosc_przyciecia) { //cout << wysokosc_trawy << " " << szybkosc_wzrostu << " " << poIluDniach << " " << wysokosc_przyciecia << endl; wysokosc_trawy += szybkosc_wzrostu * poIluDniach; if(wysokosc_trawy > wysokosc_przyciecia) { long long waga_siana = wysokosc_trawy - wysokosc_przyciecia; wysokosc_trawy = wysokosc_przyciecia; return waga_siana; } else { return 0LL; } }
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 | #include <iostream> using namespace std; long long przytnij_trawe(int &, int, int, int); int main() { int liczba_arow = 0; // 1 : 500 000 int liczba_skoszen = 0; // 1 : 500 000 int pole[500000]; int szybkosc_wzrostu[500000]; // 1 : 1 000 000 long long waga_siana = 0; int poprzedni_dzien = 0; int obecny_dzien = 0; //1 : 10^12 int wysokosc_przyciecia = 0; //1 : 10^12 int poIluDniach = 0; cin >> liczba_arow >> liczba_skoszen; int liczba_gatunkow_trawy = liczba_arow; for(int gatunek_trawy = 0; gatunek_trawy < liczba_gatunkow_trawy; gatunek_trawy++) cin >> szybkosc_wzrostu[gatunek_trawy]; for(int koszenie = 0; koszenie < liczba_skoszen; koszenie++) { waga_siana = 0; cin >> obecny_dzien >> wysokosc_przyciecia; poIluDniach = obecny_dzien - poprzedni_dzien; for(int gatunek_trawy = 0; gatunek_trawy < liczba_gatunkow_trawy; gatunek_trawy++) waga_siana += przytnij_trawe(pole[gatunek_trawy], szybkosc_wzrostu[gatunek_trawy], poIluDniach, wysokosc_przyciecia); cout << waga_siana << endl; poprzedni_dzien = obecny_dzien; } return 0; } long long przytnij_trawe(int& wysokosc_trawy, int szybkosc_wzrostu, int poIluDniach, int wysokosc_przyciecia) { //cout << wysokosc_trawy << " " << szybkosc_wzrostu << " " << poIluDniach << " " << wysokosc_przyciecia << endl; wysokosc_trawy += szybkosc_wzrostu * poIluDniach; if(wysokosc_trawy > wysokosc_przyciecia) { long long waga_siana = wysokosc_trawy - wysokosc_przyciecia; wysokosc_trawy = wysokosc_przyciecia; return waga_siana; } else { return 0LL; } } |