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