Gigel primeşte o nouă provocare de la prietenul său Programatorul! Cunoscând înălţimile clădirilor aflate pe o anumită stradă, Gigel trebuie să răspundă rapid la întrebarea: “Care este gradul de vizibilitate al străzii?”
Gradul de vizibilitate al unei străzi este dat de raportul dintre numărul clădirilor vizibile din capătul stâng al străzii şi numărul total al clădirilor de pe stradă, raport calculat cu trei zecimale.
Cerința
Pentru o intersecţie de N
străzi ajutaţi-l pe Gigel să determine gradul de vizibilitate al fiecărei străzi şi să precizeze care este strada cu grad maxim de vizibilitate.
Date de intrare
Fișierul de intrare strazi.in
conține pe prima linie numărul de străzi N
, apoi N
linii corespunzătoare datelor celor N
străzi. Pe linia K+1
(K>=1
) din fişier sunt precizate: numărul de clădiri, apoi înălţimile acestor clădiri în ordinea parcurgerii străzii cu numărul K
, de la stânga la dreapta.
Date de ieșire
Fișierul de ieșire strazi.out
va conține pe primele N
linii gradul de vizibilitate al străzilor, în ordinea crescătoare a indicilor de strada (linia X
va conţine gradul de vizibilitate al străzii X
, 1<=X<=N
). Ultima linie din fişier va conţine indicele străzii cu grad maxim de vizibilitate. Dacă sunt mai multe străzi cu grad maxim de vizibilitate atunci va fi afişată strada cu indicele de ordine cel mai mic.
Restricții și precizări
1<=N<100
- Numărul de clădiri de pe o stradă este mai mic decât
1000
. - Înălţimea unei clădiri nu depăşeşte
105
m.
Exemplu
strazi.in
4 5 5.1 7.2 2.0 6.9 8.3 3 6.5 4.2 3.1 2 3.4 5.0 4 1.2 2.3 3.4 4.5
strazi.out
0.600 0.333 1.000 1.000 3
Explicație
Clădirile vizibile din partea stângă a primei străzi sunt cele cu înălţimile 5.1
, 7.2
şi 8.3
. Gradul de vizibilitate este 3/5=0.600
Pentru strada 2
este vizibilă o singură clădire, prima. Gradul de vizibilitate este 1/3=0.333
Pentru strada 3
sunt vizibile cele 2
clădiri. Gradul de vizibilitate este 2/2=1.000
Pentru strada 4
sunt vizibile toate clădirile. Gradul de vizibilitate este 4/4=1.000
Străzile 3
şi 4
are gradul de vizibilitate maxim dar va fi afişată strada cu indicele cel mai mic.
#include <bits/stdc++.h> using namespace std; ifstream cin("strazi.in"); ofstream cout("strazi.out"); int n , m , t , rez; double a[1001] , x , x1 , x2; int main() { cin >> n; for(int i = 1 ; i <= n ; i++) { cin >> m; for(int j = 1 ; j <= m ; j++) cin >> a[j]; t = 1; x = a[1]; for(int j = 1 ; j <= m ; j++) if(a[j] > x) { t++; x = a[j]; } x1=(double)t/m; if(x1 > x2) x2 = x1 , rez = i; cout << fixed << setprecision(3) << x1 << "\n"; } cout << rez; return 0; }