1663 - Vali

From Bitnami MediaWiki
Revision as of 17:25, 3 January 2024 by Andrada378 (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Enunț

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ţă

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

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

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

  • 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

valiin.txt

1

5

1345

2649012

15480

2345

1649012

valiout.txt

valentin

Explicație

Singurul bilet fără pereche este 15480, deci posesorul este un băiat, îl cheamă Valentin (scris cu ‚v’ mic în fişier).

Rezolvare

<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>