3236 - Par Impar 2
Cerința
Se dau două numere naturale i p și o listă cu numere naturale. Să se determine al p-lea element par din listă și al i-lea element impar din listă.
Date de intrare
Fișierul de intrare parimpar2.in conține pe prima linie numerele i și p, iar pe a doua linie mai multe numere naturale separate prin spații.
Date de ieșire
Fișierul de ieșire parimpar2.out va conține două numere separate printr-un spațiu, primul reprezentând al p-lea element par, iar al doilea număr reprezentând al i-lea element impar din lista numerelor din fișierul de intrare. Dacă nu avem p elemente pare sau i elemente impare se va afișa mesajul "Nu Exista", altfel se va afisa mesajul "Date de intrare valide".
Restricții și precizări
1 ≤ i,p ≤ 100.000 numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000.000.000
Exemplu:
parimpar2.in 2 2 63 83 60 34 92
parimpar2.out 34 83
Explicație
Primul element par este 60, iar al doilea este 34. Primul element impar este 63</span., iar al doilea este 83. Deci se va afișa în fișierul de ieșire 34 83.
parimpar2.in 3 2 37 93 6 49 9 59
parimpar2.out Nu Exista
Explicație
În fișier se găsesc 3 numere impare, dar se găsește doar unul par.
Rezolvare
<syntaxhighlight lang="python" line> def validare(i, p, nums):
if not (1 <= i <= 100000 and 1 <= p <= 100000): return False if not all(0 <= num <= 1000000000 for num in nums): return False return True
def parimpar(a, b, nums):
rez1, rez2 = 0, -1 for x in nums: if x % 2 == 1: a -= 1 if a == 0: rez1 = x else: b -= 1 if b == 0: rez2 = x if a == 0 and b == 0: break if rez1 == 0 or rez2 == -1: fout.write("Nu Exista") else: fout.write(str(rez2) + " " + str(rez1)) fin.close() fout.close()
if __name__ == '__main__':
fin = open("parimpar2.in") fout = open("parimpar2.out", "w")
i, p = map(int, fin.readline().split()) nums = [int(x) for x in fin.readline().split()] if validare(i, p, nums): print("Date de intrare valide") parimpar(i, p, nums)
</syntaxhighlight>