2484 - Key

From Bitnami MediaWiki
Revision as of 06:55, 31 January 2024 by Cristina94 (talk | contribs) (Pagină nouă: ==Enunț== Cristi are în sertar n chei vechi; fiecare a costat o anumită sumă exprimată în lei și fiecare a fost făcută pentru a deschide aceeași ușă. Atât cheile cât și ușa au un cod format din 3 litere. Din păcate, unele chei s-au deteriorat și Cristi le-a împărțit în patru categorii: :1. '''stricate''' – nicio o literă din codul cheii nu coincide cu litera de pe aceeași poziție din codul ușii, iar pentru a o repara trebuie sa plătească prețul...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Enunț

Cristi are în sertar n chei vechi; fiecare a costat o anumită sumă exprimată în lei și fiecare a fost făcută pentru a deschide aceeași ușă. Atât cheile cât și ușa au un cod format din 3 litere. Din păcate, unele chei s-au deteriorat și Cristi le-a împărțit în patru categorii:

1. stricate – nicio o literă din codul cheii nu coincide cu litera de pe aceeași poziție din codul ușii, iar pentru a o repara trebuie sa plătească prețul integral al cheii;
2. deteriorate – exact o litera din codul cheii coincide cu litera de pe aceeași poziție din codul ușii, iar pentru a o repara trebuie sa plătească două treimi din prețul cheii;
3. slab deteriorate – exact două litere din codul cheii coincid cu literele de pe aceleași poziții din codul ușii, iar pentru a o repara trebuie sa platească o treime din prețul cheii;
4. bune – codul cheii e identic cu codul ușii, iar cheia nu trebuie reparată;

Cerințe

1) Să se afle câte chei din fiecare categorie are Cristi.
2) Sa se afle cât a plătit Cristi pentru a repara toate cheile.

Date de intrare

Fișierul de intrare key.in conține pe prima linie un număr P, codul ușii COD și numarul n; dacă P=1 se rezolvă doar cerința 1, iar dacă P=2 se rezolva doar cerința 2. Pe următoarele n linii se citește codul cheii și prețul acesteia.

Date de ieșire

Dacă P=1 se afișează numărul de chei stricate, numărul de chei deteriorate, numărul de chei slab deteriorate și numărul de chei bune separate printr-un spațiu, în aceasta ordine.

Dacă P=2 se afișează doar un număr COST care exprima costul total pentru repararea cheilor.

Restricții și precizări

  • 1 ≤ n ≤ 100
  • P=1 sau P=2
  • orice cod e format din 3 litere
  • orice preț este divizibil cu 3 și aparține intervalului deschis [0,999];
  • la cerința 2, dacă toate cheile sunt bune sau costul total este 0 se afișează doar mesajul GRATIS
  • pentru rezolvarea corectă a cerinței 1 se acordă 30 de puncte, iar pentru rezolvarea corectă a cerinței 2 se acordă 70 de puncte

Exemplu1

key.in
1 ABC 4
ABC 15
AXC 9
AFG 3
UYC 30
key.out
0 2 1 1

Explicație

Cristi nu are cheii stricate, dar are două cheii deteriorate, una slab deteriorata și una buna

Exemplu2

key.in
2 ABC 4
ABC 15
AXC 9
AFG 3
UYC 30
key.out
25

Rezolvare

<syntaxhighlight lang="python" line>

  1. 2484 key

with open('key.in', 'r') as f:

   p, door_code, n = f.readline().split()
   n = int(n)
   keys = []
   for i in range(n):
       key_code, price = f.readline().split()
       keys.append((key_code, int(price)))

stricate = deteriorate = slab_deteriorate = bune = 0 total_cost = 0

for key_code, price in keys:

   num_matches = sum(key_code[i] == door_code[i] for i in range(3))
   if num_matches == 0:
       stricate += 1
       total_cost += price
   elif num_matches == 1:
       deteriorate += 1
       total_cost += price * 2 / 3
   elif num_matches == 2:
       slab_deteriorate += 1
       total_cost += price / 3
   else:
       bune += 1

with open('key.out', 'w') as f:

   if p == '1':
       f.write(f"{stricate} {deteriorate} {slab_deteriorate} {bune}")
   else:
       if bune == n or total_cost == 0:
           f.write("GRATIS")
       else:
           f.write(str(int(total_cost)))

</syntaxhighlight>