3583 - jetoane
Enunț[edit | edit source]
Ionel şi Georgel colecţionează jetoane care se găsesc în revistele Scooby-Doo. Jetoanele au înscrise pe ele diferite valori, numere naturale distincte, un copil neputând avea două sau mai multe jetoane cu aceeaşi valoare. Ei propun următorul joc: având în faţă jetoanele proprii, determină împreună care este jetonul de valoare comună cu cea mai mică valoare înscrisă şi jetonul de valoare comună cu cea mai mare valoare înscrisă. După ce au identificat aceste jetoane, câştigătorul este acela care va avea cele mai multe jetoane după eliminarea acelora cu valori cuprinse între minimul şi maximul comun, inclusiv minimul şi maximul.
Cerința[edit | edit source]
Determinaţi valorile minimă şi maximă comune, precum şi câştigătorul jocului.
Date de intrare[edit | edit source]
Fişierul de intrare jetoanein.txt conţine pe prima linie două numere naturale separate printr-un singur spaţiu, m şi n reprezentând numărul de jetoane ale primului copil şi respectiv numărul de jetoane ale celui de-al doilea copil. Pe următoarea linie sunt m+n valori separate prin câte un spaţiu, ce reprezintă jetoanele primului şi apoi jetoanele celui de-al doilea copil.
Date de ieșire[edit | edit source]
Fişierul de ieșire jetoaneout.txt conţine pe prima linie trei valori întregi Min Max C separate prin câte un spaţiu, unde Min este valoarea minimă comună, Max este valoarea maximă comună, iar C va fi 0, dacă jocul se încheie la egalitate, 1 dacă va câştiga primul copil, sau 2, dacă va câştiga cel de-al doilea copil.
Restricții și precizări[edit | edit source]
- 1 ⩽ n, m ⩽ 28.000
- 1 ⩽ valoarea de pe un jeton ⩽ 50.000
- Vor exista cel puţin două valori comune
Exemplul 1[edit | edit source]
- Intrare
- jetoanein.txt
- 10 6
- 1 3 2 4 7 5 8 19 27 9 3 8 80 6 18 19
- Ieșire
- Datele de intrare corespund restricțiilor impuse
- jetoaneout.txt
- 3 19 1
Explicație[edit | edit source]
Jetonul comun cel mai mic este cel cu valoarea 3, iar cel mai mare are valoarea 19. Primul rămâne cu 3 jetoane (acestea sunt 1, 2, 27) şi al doilea rămâne cu unul singur (jetonul 80), deci jucătorul 1 este câştigător.
Exemplul 2[edit | edit source]
- Intrare
- jetoanein.txt
- 4 5
- 6 7 1 90 6 7 68 1 3
- Ieșire
- Datele de intrare corespund restricțiilor impuse
- jetoaneout.txt
- 1 7 0
Explicație[edit | edit source]
Jetonul comun cel mai mic este cel cu valoarea 1, iar cel mai mare are valoarea 7. Primul rămâne cu un jeton (acesta este 90) şi al doilea rămâne cu unul singur (jetonul 68), deci egalitate.
Exemplul 3[edit | edit source]
- Intrare
- jetoanein.txt
- 4 28001
- 6 7 1 90 6 7 68 1 3
- Ieșire
- Datele de intrare NU corespund restricțiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 3583 - Jetoane
def valideaza_input(m, n, jetoane):
# Funcție de validare a datelor de intrare conform restricțiilor if not (0 < m <= 28000 and 0 < n <= 28000): return False if len(jetoane) != m + n: return False return all(0 < val <= 50000 for val in jetoane)
def gaseste_valori_comune(jetoane1, jetoane2):
# Funcție pentru găsirea valorilor comune dintre cei doi copii valori_comune = set(jetoane1) & set(jetoane2) return valori_comune
def determina_castigator(jetoane_copil1, jetoane_copil2, valori_comune):
# Funcție pentru determinarea câștigătorului jetoane_ramase_copil1 = [val for val in jetoane_copil1 if val not in valori_comune] jetoane_ramase_copil2 = [val for val in jetoane_copil2 if val not in valori_comune]
if len(jetoane_ramase_copil1) > len(jetoane_ramase_copil2): return 1 elif len(jetoane_ramase_copil1) < len(jetoane_ramase_copil2): return 2 else: return 0
def main():
# Citirea datelor din fișierul de intrare with open("jetoanein.txt", "r") as infile: m, n = map(int, infile.readline().split()) jetoane = list(map(int, infile.readline().split()))
# Validare date de intrare if valideaza_input(m, n, jetoane): print("Datele de intrare corespund restricțiilor impuse") else: print("Datele de intrare NU corespund restricțiilor impuse") exit(0)
# Separarea jetoanelor pentru fiecare copil jetoane_copil1 = jetoane[:m] jetoane_copil2 = jetoane[m:]
# Găsirea valorilor comune valori_comune = gaseste_valori_comune(jetoane_copil1, jetoane_copil2)
# Determinarea valorilor minimă și maximă comune valoare_minima_comuna = min(valori_comune) valoare_maxima_comuna = max(valori_comune)
# Determinarea câștigătorului și scrierea rezultatelor în fișierul de ieșire castigator = determina_castigator(jetoane_copil1, jetoane_copil2, valori_comune)
with open("jetoaneout.txt", "w") as outfile: outfile.write(f"{valoare_minima_comuna} {valoare_maxima_comuna} {castigator}\n")
if __name__ == "__main__":
main()
</syntaxhighlight>