4301 - Gustare
Cerinţa[edit | edit source]
A venit ora mesei pentru Por Costel (masa dintre prânz și cină). Scormonind printr-o grădină, el descoperă un număr de N coceni de porumb și M mere. Masa lui Por Costel va consta în exact un cocean și un măr. Însă, mai nou, fanii săi l-au atenționat că trebuie să aibă grijă ce mănâncă. Fiecare cocean și fiecare măr are o valoare nutritivă. Valoarea nutritivă a mesei va fi valoarea nutritivă a coceanului ales + valoarea nutritiva a mărului ales. Dându-se valorile nutritive ale cocenilor și ale merelor, Por Costel vă întreabă dacă există o masă pe care o poate lua cu valoare nutritivă X. Pentru că Por Costel vrea sa mănânce de mai multe ori între prânz și cină, el va vă pune T întrebări de forma aceasta. (Întrebările sunt independente între ele, a nu se considera că după o întrebare se elimină perechea cocean-mar aleasă).
Date de intrare[edit | edit source]
Pe prima linie a fișierului gustarein.txt se găsește un număr natural N: numărul de coceni. Pe a doua linie se găsește o secvență de N numere naturale separate prin câte un spațiu (valorile nutritive ale cocenilor). Pe a treia linie se găsește un număr natural M: numărul de mere. Pe a patra linie se găsește o secvență de M numere naturale separate prin câte un spațiu (valorile nutritive ale merelor). Pe a cincea linie se găsește un număr natural T, numărul de întrebări ale lui Por Costel. Pe a sasea linie se gasește o secvență de T numere naturale separate prin câte un spațiu, al i-lea număr fiind valoarea dorită pentru cea de a i-a masă.
Date de ieşire[edit | edit source]
În fișierul gustareout.txt se vor scrie T linii corespunzătoare celor T întrebări. A i-a linie va conține mesajul DA dacă se poate forma valoarea nutritivă pentru a i-a masă și NU în caz contrar.
Restricții și precizări[edit | edit source]
- N, M ≤ 500.000
- T ≤ 100
- 0 ≤ valoare nutritiva a unui aliment ≤ 1.000.000.000
- 0 ≤ valoarea X a unei intrebari ≤ 2.000.000.000
- Pentru 20 de puncte, N, M ≤ 1000
- Pentru alte 50 de puncte, T ≤ 20
Exemplul 1[edit | edit source]
- gustarein.txt
4 2 2 3 5 3 2 4 6 5 6 20 10 11 7
- gustareout.txt
Datele de intrare corespund restrictiilor impuse DA NU NU DA DA
Exemplul 2[edit | edit source]
- gustarein.txt
jgjikfikm
- gustareout.txt
Datele de intrare nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat
def validare(n_validare, m_validare, t_validare, coceni_validare, mere_validare, intrebari_validare):
if n_validare < 1 or n_validare > 500000: raise ValueError if m_validare < 1 or m_validare > 500000: raise ValueError if t_validare < 1 or t_validare > 100: raise ValueError for valoare in coceni_validare + mere_validare: if valoare < 0 or valoare > 1000000000: raise ValueError for x in intrebari_validare: if x < 0 or x > 2000000000: raise ValueError file_out.write("Datele de intrare corespund restrictiilor impuse.\n")
- Funcția exista_masa verifică dacă există o masă cu valoare nutritivă X
def exista_masa(coceni, mere, intrebari):
raspunsuri_creare = [] for x in intrebari: exista = 'NU' for cocean in coceni: if x - cocean in mere: exista = 'DA' break raspunsuri_creare.append(exista) return raspunsuri_creare
if __name__ == '__main__':
file_in = open("gustarein.txt", "r") file_out = open("gustareout.txt", "w")
try: # Citim numărul de coceni, numărul de mere și numărul de întrebări n_main = int(file_in.readline()) coceni_main = list(map(int, file_in.readline().split())) m_main = int(file_in.readline()) mere_main = list(map(int, file_in.readline().split())) t_main = int(file_in.readline()) intrebari_main = list(map(int, file_in.readline().split())) # Validăm datele de intrare validare(n_main, m_main, t_main, coceni_main, mere_main, intrebari_main) # Verificăm dacă există o masă cu valoare nutritivă X pentru fiecare întrebare raspunsuri = exista_masa(coceni_main, mere_main, intrebari_main) # Scriem răspunsurile în fișierul de ieșire for raspuns in raspunsuri: file_out.write(raspuns + '\n')
# Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare except ValueError: file_out.write("Datele de intrare nu corespund restrictiilor impuse") # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare except IndexError: file_out.write("Datele de intrare nu corespund restrictiilor impuse")
</syntaxhighlight>