1963 - OP
Enunț[edit | edit source]
Șcuțu este un mare matematician. Într-o seară acesta a inventat operația ∆. Operația ∆ se aplică pe 2 numere naturale, astfel:
290 ∆ 345 = 290345
21 ∆ 12 = 2112
456 ∆ 0 = 4560
Mygo și Seba sunt la rândul lor foarte buni informaticieni. Aceștia au un vector A cu N elemente, numere naturale, indexate de la 1. Ei vor construi un nou vector V, acesta la rândul său indexat de la 1, ce conține fiecare valoare A[i] ∆ A[j] (1 ≤ i, j ≤ N) pe care îl vor sorta crescător.
Cerința[edit | edit source]
Acum Șcuțu le va pune celor 2 câte două întrebări:
1. Câte valori din V sunt mai mici sau egale cu X ?
2. Pentru X dat, ce valoare se află pe poziția X ?
Să se răspundă la cele 2 întrebări.
Date de intrare[edit | edit source]
Fișierul de intrare opin.txt conține pe prima linie numărul t, având valoarea 1 sau 2, reprezentând tipul întrebării la care se cere răspunsul. Pe a doua linie linie se află numărul N și X iar pe a treia linie se vor afla N numere naturale nenule, reprezentând valorile vectorului A.
Date de ieșire[edit | edit source]
Fișierul de ieșire opout.txt va conține pe prima linie numărul S, reprezentând răspunsul întrebării.
Restricții și precizări[edit | edit source]
- 1 ⩽ N ⩽ 100.000
- numerele de pe a treia linie a fișierului de intrare vor fi mai mici decât 1.000.000.000
Exemplul 1[edit | edit source]
- Intrare
- opin.txt
- 1
- 3 23
- 1 2 4
- Ieșire
- Datele de intrare corespund restricțiilor impuse
- opout.txt
- 5
Explicație[edit | edit source]
V = {11, 12, 14, 21, 22, 24, 41, 42, 44}. Sunt 5 numere mai mici decât 23.
Exemplul 2[edit | edit source]
- Intrare
- opin.txt
- 2
- 3 6
- 1 2 4
- Ieșire
- Datele de intrare corespund restricțiilor impuse
- opout.txt
- 24
Explicație[edit | edit source]
V = {11, 12, 14, 21, 22, 24, 41, 42, 44}. Pe poziția 6 se află numărul 24.
Exemplul 3[edit | edit source]
- Intrare
- opin.txt
- 3
- 3 6
- 1 2 4
- Ieșire
- Datele de intrare NU corespund restricțiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line>
- 1963 - Op
def valideaza_input(t, n, a):
if t not in [1, 2]: return False if not 1 <= n <= 100000: return False if not all(0 < ai < 1000000000 for ai in a): return False return True
def calculeaza_v(n, a):
v = [] for i in range(n): for j in range(n): v.append(int(str(a[i]) + str(a[j]))) return sorted(v)
def numara_valori_mai_mici_sau_egale_cu_x(v, x):
count = 0 for value in v: if value <= x: count += 1 return count
def gaseste_valoare_pe_pozitia_x(v, x):
return v[x - 1]
if __name__ == "__main__":
rezultat = 0 with open("opin.txt", "r") as file: t = int(file.readline().strip()) n, x = map(int, file.readline().strip().split()) a = list(map(int, file.readline().strip().split()))
if valideaza_input(t, n, a): print("Datele de intrare corespund restricțiilor impuse") if t == 1: v = calculeaza_v(n, a) rezultat = numara_valori_mai_mici_sau_egale_cu_x(v, x) elif t == 2: v = calculeaza_v(n, a) rezultat = gaseste_valoare_pe_pozitia_x(v, x) else: print("Datele de intrare NU corespund restricțiilor impuse") exit(0)
with open("opout.txt", "w") as output_file: output_file.write(str(rezultat))
</syntaxhighlight>