salturi

Time limit: 0.085s Memory limit: 16MB Input: salturi.in Output: salturi.out

Se dă un șir de numere întregi a0,a1,,aN1a_0, a_1, \dots, a_{N-1}. Fiecare valoare aia_i reprezintă mărimea maximă a unui salt ce poate fi efectuat din pozitia ii. Din poziţia i, se poate ajunge printr-un salt la oricare din poziţiile i+1i+1, i+2i+2, \dots, i+aii+a_i, dacă aia_i este pozitiv, iar dacă aia_i este negativ se poate ajunge la oricare din poziţiile i1i-1, i2i-2, \dots, iaii-a_i. Trebuie să se ajungă, prin salturi, de la poziția 00 la o poziție mai mare decât N1N - 1 (în afara vectorului, la dreapta).

Cerinţă

Scrieți un program care să determine numărul minim de salturi necesare pentru a ajunge de la poziția 00 la o poziție mai mare decât N1N - 1.

Date de intrare

Fişierul de intrare salturi.in conţine pe prima linie numărul natural NN. Pe linia a doua se află scrise cele NN numere ale șirului, separate prin spații.

Date de ieşire

Fişierul de ieşire salturi.out va conține un singur număr natural reprezentând numărul minim de salturi necesare pentru a ajunge de la poziția 00 la o poziție mai mare decât N1N - 1.

Restricții și precizări

  • 2N1 000 0002 \leq N \leq 1 \ 000 \ 000
  • 1 000 000ai1 000 000-1 \ 000 \ 000 \leq a_i \leq 1 \ 000 \ 000, pentru fiecare 0iN10 \leq i \leq N - 1.
  • Întotdeauna este posibil să se ajungă la o poziţie mai mare decât N1N - 1.
  • Concurenţilor care scriu programe C/C++ li se recomandă să citească datele de intrare cu ajutorul funcţiilor din biblioteca C.

Exemplu

salturi.in

5
2 3 -10 1 1

salturi.out

3

Explicație

De la poziția 00 se sare la poziția 11, apoi la poziția 44, apoi în afara șirului.

Log in or sign up to be able to send submissions!