ConcursC++17

Santinele

Se cunosc înălțimile a NN vârfuri, plasate de la stânga la dreapta, în cadrul unui lanț muntos. Dacă plasăm o santinelă pe un vârf de o anumită înălțime, aceasta veghează vârful respectiv și maximum KK vârfuri la stânga și maximum KK vârfuri la dreapta acestuia, dar cu condiția ca înălțimile acestor vârfuri vegheate să fie mai mici sau egale cu înălțimea vârfului pe care se află santinela. Dacă există un vârf cu o înălțime strict mai mare la distanță mai mică sau egală cu KK, atunci santinela veghează doar până la acel vârf (exclusiv acel vârf).

Cerință

Date fiind NN, KK și înălțimile celor NN vârfuri, să se determine:

  1. Numărul maxim de vârfuri consecutive, începând de la primul vârf al lanțului muntos (inclusiv acest vârf), ce pot fi vegheate cu o singură santinelă.
  2. Numărul minim de santinele necesare ca toate vârfurile să fie vegheate.

Date de intrare

Fișierul de intrare santinele.in conține pe prima linie numărul cerinței, 11 sau 22. Pe a doua linie, fișierul conține numerele NN și KK, cu semnificația din enunț. Pe a treia linie, fișierul conține NN numere, h1,h2,…,hNh_{1}, h_{2}, \ldots, h_{N}, reprezentând înălțimile celor NN vârfuri, în ordinea dispunerii lor de la stânga la dreapta, în cadrul lanțului muntos. Numerele aflate pe aceeași linie a fișierului de intrare sunt separate prin câte un spațiu.

Date de ieșire

Fișierul de ieșire santinele.out conține un singur număr. Dacă cerința este 11, conține numărul maxim de vârfuri determinate la această cerință. Dacă cerința este 22, conține numărul minim de santinele determinate la această cerință.

Restricții și precizări

  • 1≤N≤100 0001 \leq N \leq 100 \ 000;
  • 0≤K<N0 \le K < N;
  • 1≤hi≤1 000 0001 \leq h_i \leq 1 \ 000 \ 000.
#PunctajRestricții
114C=1C = 1
214C=2C = 2, NN par, K=N/2K = N/2.
316C=2C = 2 și h1<h2<…<hNh_1 < h_2 < \ldots < h_N
413C=2C = 2 și există 1<p<N1 < p < N, pentru care h1<…<hp−1<hp>hp+1>…>hNh_1 < \ldots < h_{p-1} < h_p > h_{p + 1} > \ldots > h_N
514C=2C = 2, N≤15N \leq 15
629C=2C = 2, fără restricții suplimentare.

Exemplul 1

santinele.in

1
8 2
6 10 5 7 8 5 4 4

santinele.out

4

Explicație

Cerința este 11 și K=2K = 2. Santinela veghează vârful pe care este plasată, maximum două vârfuri la stânga și maximum două vârfuri la dreapta. Cu o singură santinelă putem acoperi maximum patru vârfuri, începând cu primul vârf, plasând santinela pe al doilea vârf.

Exemplul 2

santinele.in

2
10 2
10 5 5 10 6 7 4 1 6 7

santinele.out

4

Explicație

Cerința este 22 și K=2K = 2. Sunt necesare minimum 44 santinele, pe care le putem amplasa pe vârfurile: primul, al 44-lea, al 77-lea, al 1010-lea.

Exemplul 3

santinele.in

2
15 3
5 3 1 12 11 9 15 11 10 9 2 7 10 11 7

santinele.out

3

Explicație

Cerința este 22 și K=3K = 3. Sunt necesare minimum 33 santinele. Le putem amplasa pe vârfurile: primul, al 77-lea, al 1414-lea.

Figura 1 din enunțul original al problemei Santinele.Figura 1 din enunțul original al problemei Santinele.Mărește schema ↗

Exemplul 4

santinele.in

2
20 5
7 12 23 21 20 24 28 21 4 16 27 1 6 8 20 3 3 5 11 5

santinele.out

3

Explicație

Cerința este 22 și K=5K = 5. Sunt necesare minimum 33 santinele. Le putem amplasa pe vârfurile: al 33-lea, al 77-lea, al 1515-lea.

Sursă și autori

OJI 2024, clasele 9. Cristian Frâncu.

Enunț din Kilonova, sub licența CC-BY-NC-SA-4.0, conform politicii sursei. Adaptări de prezentare și tipografie. Exemplele, formulele și figurile originale sunt păstrate.

RÂNDUL TĂU

Trimite o soluție

Editor de cod

Setul original de teste și regulile de punctare sunt în curs de verificare. Trimiterea pentru evaluare va fi disponibilă după această verificare.

Se verifică autentificarea…

Un pas, apoi următorul.Înapoi sus ↑