#include <iostream> #include <cstdlib> using namespace std; long long sum_growth_rate = 0; long long grass_mass = 0; long long mowing_grass_mass = 0; long long growth_rate = 0; long long current_mowing_day = 0; long long last_mowing_day = 0; long long mowing_length = 0; int nr_of_areas; int nr_of_mowing; long long should_remain_mowing_grass_mass; long long current_grass_growth_mass; long long rest = 0; int min_growth_rates = -1; long long last_mowing_length = 0; long long period = 0; bool update_to_last_mowing_langth = false; int main(int argc, char *argv[]) { cin >> nr_of_areas; cin >> nr_of_mowing; unsigned int growth_rates[nr_of_areas]; unsigned int current_grass_lengts[nr_of_areas]; for (unsigned int i=0; i<nr_of_areas; i++) { cin >> growth_rates[i]; current_grass_lengts[i] = 0; sum_growth_rate += growth_rates[i]; if (growth_rates[i] < min_growth_rates || min_growth_rates == -1) { min_growth_rates = growth_rates[i]; } } for (unsigned int i=0; i<nr_of_mowing; i++) { cin >> current_mowing_day; cin >> mowing_length; period = current_mowing_day - last_mowing_day; should_remain_mowing_grass_mass = nr_of_areas * mowing_length; if (mowing_length <= (period * min_growth_rates)) { update_to_last_mowing_langth = true; current_grass_growth_mass = period * sum_growth_rate; grass_mass += current_grass_growth_mass; mowing_grass_mass = grass_mass - should_remain_mowing_grass_mass; grass_mass -= mowing_grass_mass; } else { mowing_grass_mass = 0; grass_mass = 0; for(unsigned int j=0; j < nr_of_areas; j++) { if (update_to_last_mowing_langth) { current_grass_lengts[j] = last_mowing_length + growth_rates[j] * (period); } else { current_grass_lengts[j] += growth_rates[j] * (period); } rest = current_grass_lengts[j] - mowing_length; if (rest >= 0) { current_grass_lengts[j] -= rest; mowing_grass_mass += rest; } grass_mass += current_grass_lengts[j]; } update_to_last_mowing_langth = false; } last_mowing_day = current_mowing_day; last_mowing_length = mowing_length; cout << mowing_grass_mass << "\n"; } return EXIT_SUCCESS; }
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 | #include <iostream> #include <cstdlib> using namespace std; long long sum_growth_rate = 0; long long grass_mass = 0; long long mowing_grass_mass = 0; long long growth_rate = 0; long long current_mowing_day = 0; long long last_mowing_day = 0; long long mowing_length = 0; int nr_of_areas; int nr_of_mowing; long long should_remain_mowing_grass_mass; long long current_grass_growth_mass; long long rest = 0; int min_growth_rates = -1; long long last_mowing_length = 0; long long period = 0; bool update_to_last_mowing_langth = false; int main(int argc, char *argv[]) { cin >> nr_of_areas; cin >> nr_of_mowing; unsigned int growth_rates[nr_of_areas]; unsigned int current_grass_lengts[nr_of_areas]; for (unsigned int i=0; i<nr_of_areas; i++) { cin >> growth_rates[i]; current_grass_lengts[i] = 0; sum_growth_rate += growth_rates[i]; if (growth_rates[i] < min_growth_rates || min_growth_rates == -1) { min_growth_rates = growth_rates[i]; } } for (unsigned int i=0; i<nr_of_mowing; i++) { cin >> current_mowing_day; cin >> mowing_length; period = current_mowing_day - last_mowing_day; should_remain_mowing_grass_mass = nr_of_areas * mowing_length; if (mowing_length <= (period * min_growth_rates)) { update_to_last_mowing_langth = true; current_grass_growth_mass = period * sum_growth_rate; grass_mass += current_grass_growth_mass; mowing_grass_mass = grass_mass - should_remain_mowing_grass_mass; grass_mass -= mowing_grass_mass; } else { mowing_grass_mass = 0; grass_mass = 0; for(unsigned int j=0; j < nr_of_areas; j++) { if (update_to_last_mowing_langth) { current_grass_lengts[j] = last_mowing_length + growth_rates[j] * (period); } else { current_grass_lengts[j] += growth_rates[j] * (period); } rest = current_grass_lengts[j] - mowing_length; if (rest >= 0) { current_grass_lengts[j] -= rest; mowing_grass_mass += rest; } grass_mass += current_grass_lengts[j]; } update_to_last_mowing_langth = false; } last_mowing_day = current_mowing_day; last_mowing_length = mowing_length; cout << mowing_grass_mass << "\n"; } return EXIT_SUCCESS; } |