2569 - Alo
De ziua ei, Dora a primit cadou un telefon mobil cu cartelă pentru rețeaua favorită. Suma disponibilă pe cartelă este de E Eurici dar oferta este grozavă pentru convorbiri. Astfel, pentru fiecare minut de convorbire în care a fost sunată dintr-o altă rețea decât rețeaua ei, cartela se încarcă cu 1 Euric dar, dacă sună ea într-o altă rețea, Dora va consuma câte 2 Eurici din creditul de pe cartela ei pentru fiecare minut de convorbire. Între membrii rețelei Dorei, toate convorbirile sunt gratuite indiferent de durata convorbirii, fie că sună ea, fie că este sunată.
Toate numerele din rețeaua Dorei au patru cifre și se termină cu cifra 9 iar numerele din alte rețele au tot patru cifre și se termină cu cifra 5. Când sună Dora, ea formează întâi cifra 1 înaintea numărului pe care îl apelează. Când este sunată, apare cifra 2 înaintea numărului de la care primește apelul.
Cerinţa
Scrieți un program care, știind E, valoarea inițială a creditului de pe cartela primită cadou, cele N numere corespunzătoare convorbirilor pe care le-a avut Dora și duratele acestora exprimate în minute, să determine valoarea creditului rămas pe cartelă la terminarea convorbirilor.
Date de intrare
Din prima linie a fișierului text alo.in se citesc E, valoarea creditului inițial de pe cartelă și N numărul de convorbiri. Din următoarele N linii se citesc perechi de forma Nr D unde Nr – numărul corespunzător convorbirii și D – durata acesteia.
Date de ieşire
În fișierul text alo.out se va scrie pe prima linie S-numărul de Eurici care sunt disponibili pe cartela Dorei după cele N convorbiri.
Restricții și precizări
- 5 ⩽ E ⩽ 100
- 2 ⩽ N ⩽ 500
- 1 ⩽ D ⩽ 50
- Convorbirile în care sună Dora se încadrează în limita creditului de pe cartelă de la momentul respectiv.
Exemplu
- alo.in
- 10 5
- 12345 4
- 12439 15
- 21335 30
- 18375 10
- 22359 20
- alo.out
- 12
Explicație
- 12345 4 – Dora sună la numărul 2345 care nu face parte din rețeaua ei și vorbește 4 minute. De pe cartelă se consumă 4*2=8 Eurici
- 12439 15 – Dora sună la numărul 2439 din rețeaua ei și vorbește 15 minute gratis
- 21335 30 – Dora este sunată de la numărul 1335 care nu este din rețeaua ei și vorbește 30 minute: Cartelase încarcă cu 30*1=30 Eurici
- 18375 10 – Dora sună la numărul 8375 care nu face parte din rețeaua ei și vorbește 10 minute. De pe cartelă se consumă 10*2=20 Eurici
- 22359 20 – Dora este sunată de la 2359 din rețeaua ei și vorbește 20 minute gratis.
Suma rămasă: 10-8+30-20=12 Eurici
Rezolvare
<syntaxhighlight lang="python" line> def calculeaza_credit(nr, durata, credit):
if str(nr)[0] == '1': # Verificăm dacă Dora sună (numărul începe cu 1) if str(nr)[-1] == '5': # Verificăm dacă sună în altă rețea (numărul se termină cu 5) credit -= durata * 2 # Dacă sună în altă rețea, se consumă 2 Eurici pe minut elif str(nr)[0] == '2': # Verificăm dacă Dora este sunată (numărul începe cu 2) if str(nr)[-1] == '5': # Verificăm dacă este sunată din altă rețea (numărul se termină cu 5) credit += durata # Dacă este sunată din altă rețea, cartela se încarcă cu 1 Euric pe minut # Returnăm creditul rămas pe cartelă return credit
- Deschidem fișierul de intrare pentru a citi datele
with open('alo.in', 'r') as intrare:
# Citim valoarea inițială a creditului și numărul de convorbiri E, N = map(int, intrare.readline().split()) convorbiri = [list(map(int, linie.split())) for linie in intrare] # Citim numerele și duratele convorbirilor
credit = E # Inițializăm creditul cu valoarea inițială for nr, durata in convorbiri: # Parcurgem fiecare convorbire
credit = calculeaza_credit(nr, durata, credit) # Calculăm creditul rămas pe cartelă după fiecare convorbire
- Deschidem fișierul de ieșire pentru a scrie rezultatul
with open('alo.out', 'w') as iesire:
iesire.write(str(credit))
</syntaxhighlight>