#include <iostream> enum class Kierunek { gora, dol }; bool isMini(int i) { return i == -1'000'000; } bool isMaxi(int i) { return i == 1'000'000; } int wycen(int prev, int curr, bool did_pay, Kierunek kier) { if (kier == Kierunek::dol) { if(did_pay) return 0; return (prev <= curr) ? 1 : 0; } else { // if(kier == Kierunek::gora) { if(did_pay) return 0; return (prev >= curr) ? 1 : 0; } } int main() { std::ios::sync_with_stdio(false); int count; std::cin >> count; int prev; std::cin >> prev; int curr; int koszt[2] = { isMaxi(prev) ? 1 : 0, isMini(prev) ? 1 : 0 }; bool did_pay[2] = { 0 < koszt[0], 0 < koszt[1] }; for(int i = 1; i < count; ++i) { std::cin >> curr; bool i_even = ((i % 2) == 0); for(int k = 0; k < 2; ++k) { bool k_even = ((k % 2) == 0); auto kier = (i_even xor k_even) ? Kierunek::gora : Kierunek::dol; int dk = wycen(prev, curr, did_pay[k], kier); koszt[k] += dk; did_pay[k] = (0 < dk); } prev = curr; } int wynik = std::min(koszt[0], koszt[1]); std::cout << wynik << "\n"; 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 | #include <iostream> enum class Kierunek { gora, dol }; bool isMini(int i) { return i == -1'000'000; } bool isMaxi(int i) { return i == 1'000'000; } int wycen(int prev, int curr, bool did_pay, Kierunek kier) { if (kier == Kierunek::dol) { if(did_pay) return 0; return (prev <= curr) ? 1 : 0; } else { // if(kier == Kierunek::gora) { if(did_pay) return 0; return (prev >= curr) ? 1 : 0; } } int main() { std::ios::sync_with_stdio(false); int count; std::cin >> count; int prev; std::cin >> prev; int curr; int koszt[2] = { isMaxi(prev) ? 1 : 0, isMini(prev) ? 1 : 0 }; bool did_pay[2] = { 0 < koszt[0], 0 < koszt[1] }; for(int i = 1; i < count; ++i) { std::cin >> curr; bool i_even = ((i % 2) == 0); for(int k = 0; k < 2; ++k) { bool k_even = ((k % 2) == 0); auto kier = (i_even xor k_even) ? Kierunek::gora : Kierunek::dol; int dk = wycen(prev, curr, did_pay[k], kier); koszt[k] += dk; did_pay[k] = (0 < dk); } prev = curr; } int wynik = std::min(koszt[0], koszt[1]); std::cout << wynik << "\n"; return 0; } |