1663 - Vali
Enunț[edit | edit source]
De Ziua Îndrăgostiţilor Vali a hotărât să organizeze o petrecere mare pe stadionul oraşului. La petrecere pot participa numai şi numai îndrăgostiţi care şi-au procurat biletele din timp. Biletele oricărui cuplu sunt aproape identice. Ele au proprietatea că numărul de serie are prima cifră 1 pentru băieţi şi *prima cifră 2 pentru fete, continuarea celor două numere este identică. De exemplu, dacă prietenul are biletul cu numărul 134, atunci prietena lui are biletul 234, iar dacă prietena are biletul 2234567890, atunci prietenul ei are biletul 1234567890.
Bineînțeles, că și Vali are bilet și speră să câștige un cadou. Biletul lui Vali are aceeași proprietate ca celelalte bilete, cu o singură excepție: Vali nu va participa cu pereche la acest eveniment.
Pe parcursul desfășurării petrecerii, biletele de intrare vor avea şi rolul de bilet de tombolă. Acestea vor fi introduse într-o urnă şi câteva dintre ele vor fi extrase, iar norocoşii proprietari ai biletelor vor primi cadouri valoroase. Se mai știe că există probabilitatea ca unii participanți să vină la petrecere cu bilete falsificate, având numere identice cu cele de pe un bilet original. Acest fapt se va depista cu ușurință în momentul extragerii.
Cerinţă[edit | edit source]
Cunoscând numerele de serie ale tuturor biletelor de intrare la acest eveniment, aflaţi:
a) dacă pe Vali o cheamă Valentina sau îl cheamă Valentin;
b) numărul biletului lui Vali.
Date de intrare[edit | edit source]
Fişierul valiin.txt are următoarea structură:
Pe prima linie un număr natural p. Pentru toate testele de intrare, numărul p poate avea doar valoarea 1 sau valoarea 2.
Pe a doua linie un număr natural n, reprezentând numărul de participanţi. Următoarele n linii conţin câte un număr de bilet.
Date de ieşire[edit | edit source]
Fişierul valiout.txt are următoarea structură:
Dacă valoarea lui p este 1, se va rezolva numai punctul a) din cerinţă. În acest caz, în fişierul de ieşire se va scrie un singur cuvânt: valentin sau valentina (totul cu litere mici!) , în concordanţă cu numele lui Vali din certificatul de naștere.
Dacă valoarea lui p este 2, se va rezolva numai punctul b) din cerinţă. În acest caz, în fişierul de ieșire se va scrie un număr natural, reprezentând numărul de pe biletul lui Vali.
Restricţii şi precizări[edit | edit source]
- 3 ≤ n ≤ 299999
- pentru 30% din teste avem p=1, iar pentru 70% din teste avem p=2;
- pentru 90% din teste numărul biletului nu depășește tipul long (C++) respectiv longint (Pascal), pentru 10% din teste există bilete cu numere până la 17 cifre.
- pentru 90% din teste biletul lui Vali nu este falsificat, iar pentru 10% din teste numărul biletului lui Vali coincide cu numărul unui alt bilet xeroxat.
Exemple[edit | edit source]
valiin.txt
1
5
1345
2649012
15480
2345
1649012
valiout.txt
valentin
Explicație[edit | edit source]
Singurul bilet fără pereche este 15480, deci posesorul este un băiat, îl cheamă Valentin (scris cu ‚v’ mic în fişier).
Rezolvare[edit | edit source]
<syntaxhighlight lang="python"> def valentin_sau_valentina(bilet):
if int(bilet[0]) % 2 == 1: return "valentin" else: return "valentina"
def gaseste_bilet_Vali(bilete):
for i in range(len(bilete)): bilet = bilete[i] if bilet not in bilete[:i] and bilet not in bilete[i + 1:]: return bilet
def main():
with open("valiin.txt", "r") as file: p = int(file.readline().strip()) n = int(file.readline().strip()) if not (3 <= n <= 299999): print("Numarul de participanti nu respecta restrictia.") return bilete = [file.readline().strip() for _ in range(n)]
if p == 1: with open("valiout.txt", "w") as file_out: file_out.write(valentin_sau_valentina(gaseste_bilet_Vali(bilete))) elif p == 2: with open("valiout.txt", "w") as file_out: file_out.write(gaseste_bilet_Vali(bilete))
if __name__ == "__main__":
main()
</syntaxhighlight>