Cerința
În ţara lui Gigel se află n
oraşe, numerotate de la 1
la n
, cu proprietatea că din oraşul i
exista drum numai spre oraşul i+1
, iar din oraşul n
există drum spre oraşul 1
. Gigel doreşte să viziteze toate cel n
oraşe în ordine, pornind dintr-un oraş oarecare şi întorcându-se la final în acesta.
Lucrurile nu sunt atât de simple, deoarece pentru a se deplasa dintr-un oraş i
în oraşul următor Gigel are nevoie de o cantitate cunoscută de energie, A[i]
. De asemenea, în fiecare oraş Gigel acumulează o cantitate cunoscută de energie B[i]
, pe care o poate folosi pentru a se deplasa mai departe. Iniţial, Gigel nu are deloc energie.
Determinaţi, dacă există, un oraş din care Gigel poate începe vizitarea celor n
oraşe, astfel încât la final Gigel să se întoarcă în oraşul din care a plecat.
Date de intrare
Programul citește de la tastatură numărul n
, iar apoi n
perechi de numere naturale A[i] B[i]
.
Date de ieșire
Programul va afișa pe ecran numărul P
, reprezentând numărul de ordine al oraşului din care poate porni Gigel, respectiv -1
dacă drumul nu poate fi parcurs, indiferent din care oraş ar pleca.
Restricții și precizări
1 ≤ n ≤ 1000
1 ≤ A[i] ≤ 1000
0 ≤ B[i] ≤ 1000
- Dacă Gigel poate pleca din mai multe oraşe, se va afişa oraşul cu numărul de ordine mai mic
- Dacă energia necesară pentru deplasarea dintr-un oraş în următorul este egală cu energia pe care o are Gigel la plecarea din oraş, deplasarea se poate face.
Exemplu
Intrare
5 6 7 8 4 2 6 1 4 2 1
Ieșire
3
Explicație
Gigel poate pleca din oraşul 3
sau din oraşul 4
.
Cum e corect?
cout < "As la info";
cout << "As la info";
cout >> "As la info";
Felicitări! Poți mai mult?
Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.
Greșit, dar nu-i bai!
Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.
Rezolvare
Iată rezolvarea de 100 de puncte pentru problema Excursie:
#include <iostream>
using namespace std;
int A[2005], B[2005], n;
// A[i] - necesar
// B[i] - existent
int main(){
cin >> n;
for(int i = 1 ; i <= n ; ++i)
cin >> A[i] >> B[i];
for(int i = 1 ; i <= n ; ++i)
A[n+i] = A[i], B[n+i] = B[i];
int p = -1;
for(int i = 1; i <= n && p == -1 ; i ++)
{
int s = 0;
bool OK = true;
for(int j = 0; j < n && OK ; ++j)
{
s += B[i+j];
s -= A[i+j];
if(s < 0)
OK = false;
}
if(OK)
p = i;
}
cout << p ;
return 0;
}
Atenție
Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa .
Rezolvarea problemei #552 Excursie
Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #552 Excursie de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.
Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!