Park – Omówienie zadania z Olimpiady Informatycznej Juniorów

Szczegółowe omówienie zadania Park.
To zadanie z Olimpiady Informatycznej Juniorów w którym liczy się tylko pomysł. Zadanie pokazuje moc algorytmiki która przyspiesza działanie programów:

Link do powyższego omówienia zadania Park:
https://youtu.be/qVgwgwmozcs?t=1188
Zadanie Park wymaga jedynie prostego zauważenia że nie musimy wszystkiego liczyć  z lewej i prawej strony dla każdej góry. Możemy po prostu jednym przejściem znaleźć maksymalny wierzchołek z lewej i prawej strony.
Zadanie Park pochodzi z poprzednich edycji Olimpiady Informatycznej Gimnazjalistów, poprzednika Olimpiady Informatycznej Juniorów:
To piękne zadanie które pokazuje
   * Możemy walczyć o dobry wynik na Olimpiadzie Informatycznej
   * Jest wielka moc w algorytmice!
Jak się uczyć na podstawie tego zadania?
https://youtu.be/QgLyXYmFQeU?t=2019

——-


#include <bits/stdc++.h>
using namespace std;

const int MAX_LICZBA_PUNKTOW = 1e6 + 7;
int punkty [MAX_LICZBA_PUNKTOW];
int max_wys_na_lewo [MAX_LICZBA_PUNKTOW];
int max_wys_na_prawo [MAX_LICZBA_PUNKTOW];

int main() {
 ios_base::sync_with_stdio(0);
 cin.tie(0);
 cout.tie(0);
 
 int i;
 int liczba_punktow;
 int max_wysokosc;

 cin >> liczba_punktow;
 for (i=1; i<=liczba_punktow; ++i)
    cin >> punkty[i];

 max_wysokosc = 0;
 for (i=1; i<=liczba_punktow; ++i) {
    if ( punkty[i] > max_wysokosc )
       max_wysokosc = punkty[i];
    max_wys_na_lewo[i] = max_wysokosc;
 }

 max_wysokosc = 0;
 for (i=liczba_punktow; i>=1; --i) {
    if ( punkty[i] > max_wysokosc )
       max_wysokosc = punkty[i];
    max_wys_na_prawo[i] = max_wysokosc;
 }

 for (i=1; i<=liczba_punktow; ++i)
    cout << max_wys_na_lewo[i] << " " << max_wys_na_prawo[i] << "\n";

 return 0;
}
Kod C++ programu Park, który jest omówiony w powyższym filmie i który otrzymuje 100% 

Nie dodano jeszcze komentarza, rozpocznij dyskusję pierwszy.

Dodaj komentarz