2733 - nrapp: Difference between revisions
Pagină nouă: ==Cerința== Se dă un număr natural '''N''' si un șir '''v''' de '''N''' numere naturale. Sa se răspundă la '''Q''' întrebări de tipul: '''D y''': Care este cea mai mică poziție '''x''', unde '''x''' > '''y''', pentru care '''v[x] < v[y]'''? Dacă nu există o astfel de poziție, răspunsul acestei întrebări va fi '''N + 1'''. '''S y''': Care este cea mai mare poziție '''x''', unde '''x''' < '''y''', pentru care '''v[x] < v[y]'''? Dacă nu există o astfel de po... |
No edit summary |
||
Line 8: | Line 8: | ||
==Date de intrare== | ==Date de intrare== | ||
Fișierul de intrare ''' | Fișierul de intrare '''nrappin.txt''' conține pe prima linie numărul natural '''N''', iar pe a doua linie '''N''' numere naturale separate prin spații. A treia linie va conține numărul natural nenul '''Q''' și apoi '''Q''' întrebări precum cele descrise anterior. | ||
==Date de ieșire== | ==Date de ieșire== | ||
Fișierul de ieșire ''' | Fișierul de ieșire '''nrappout.txt''' va conține '''Q''' linii, anume răspunsul pentru fiecare întrebare în parte. | ||
==Restricții și precizări== | ==Restricții și precizări== | ||
Line 19: | Line 19: | ||
*'''1 ≤ v[i] ≤ 1.000.000''' | *'''1 ≤ v[i] ≤ 1.000.000''' | ||
== | ==Exemplul 1:== | ||
; | ;nrappin.txt | ||
8 | |||
1 3 6 5 2 1 9 6 | |||
8 | |||
S 1 | |||
D 2 | |||
D 3 | |||
S 4 | |||
S 5 | |||
D 6 | |||
D 7 | |||
D 8 | |||
; | ;nrappout.txt | ||
Datele de intrare corespund restrictiilor impuse | |||
0 | |||
5 | |||
4 | |||
2 | |||
1 | |||
9 | |||
: | 8 | ||
9 | |||
==Exemplul 2:== | |||
;nrappin.txt | |||
nrapp | |||
;nrappout.txt | |||
Datele de intrare nu corespund restrictiilor impuse | |||
==Rezolvare== | ==Rezolvare== | ||
Line 50: | Line 61: | ||
<syntaxhighlight lang="python" line="1" start="1"> | <syntaxhighlight lang="python" line="1" start="1"> | ||
def validare(n, sir_v, q, intrebari, file_output): # functia de validare a datelor de intrare | |||
def | if not 1 <= n <= 100000: | ||
raise ValueError | |||
for val in sir_v: | |||
# | if not 1 <= val <= 1000000: # fiecare element trebuie sa fie numar intreg intre 1 si 1.000.000 | ||
for | raise ValueError | ||
# | if q < 1: | ||
if | raise ValueError | ||
y = | for intrebare in intrebari: | ||
if len(intrebare) != 2 or not isinstance(intrebare[1], int): | |||
raise ValueError | |||
file_output.write("Datele de intrare corespund restrictiilor impuse\n") | |||
for x in range(y + 1, | |||
if | |||
def solve(n, sir_v, intrebari): # functia de rezolvare | |||
raspunsuri = [] | |||
for intrebare in intrebari: | |||
if intrebare[0] == 'D': | |||
y = intrebare[1] | |||
raspuns = n + 1 | |||
for x in range(y + 1, n + 1): | |||
if sir_v[x - 1] < sir_v[y - 1]: | |||
raspuns = x | |||
break | break | ||
raspunsuri.append(raspuns) | |||
elif intrebare[0] == 'S': | |||
y = intrebare[1] | |||
elif | raspuns = 0 | ||
y = | |||
for x in range(y - 1, 0, -1): | for x in range(y - 1, 0, -1): | ||
if | if sir_v[x - 1] < sir_v[y - 1]: | ||
raspuns = x | |||
break | break | ||
raspunsuri.append(raspuns) | |||
return raspunsuri | |||
if __name__ == '__main__': | |||
file_in = open('nrappin.txt', 'r') | |||
file_out = open('nrappout.txt', 'w') | |||
try: | |||
N = int(file_in.readline()) | |||
v = list(map(int, file_in.readline().split())) | |||
Q = int(file_in.readline()) | |||
queries = [] | |||
for _ in range(Q): | |||
query = file_in.readline().split() | |||
queries.append((query[0], int(query[1]))) | |||
validare(N, v, Q, queries, file_out) | |||
answers = solve(N, v, queries) | |||
for answer in answers: | |||
file_out.write(str(answer) + '\n') | |||
except ValueError: | |||
file_out.write("Datele de intrare nu corespund restrictiilor impuse") | |||
except IndexError: | |||
file_out.write("Datele de intrare nu corespund restrictiilor impuse") | |||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 18:13, 29 November 2023
Cerința[edit | edit source]
Se dă un număr natural N si un șir v de N numere naturale. Sa se răspundă la Q întrebări de tipul:
D y: Care este cea mai mică poziție x, unde x > y, pentru care v[x] < v[y]? Dacă nu există o astfel de poziție, răspunsul acestei întrebări va fi N + 1. S y: Care este cea mai mare poziție x, unde x < y, pentru care v[x] < v[y]? Dacă nu există o astfel de poziție, răspunsul acestei întrebări va fi 0.
Date de intrare[edit | edit source]
Fișierul de intrare nrappin.txt conține pe prima linie numărul natural N, iar pe a doua linie N numere naturale separate prin spații. A treia linie va conține numărul natural nenul Q și apoi Q întrebări precum cele descrise anterior.
Date de ieșire[edit | edit source]
Fișierul de ieșire nrappout.txt va conține Q linii, anume răspunsul pentru fiecare întrebare în parte.
Restricții și precizări[edit | edit source]
- 1 ≤ N ≤ 100.000
- 1 ≤ v[i] ≤ 1.000.000
Exemplul 1:[edit | edit source]
- nrappin.txt
8 1 3 6 5 2 1 9 6 8 S 1 D 2 D 3 S 4 S 5 D 6 D 7 D 8
- nrappout.txt
Datele de intrare corespund restrictiilor impuse 0 5 4 2 1 9 8 9
Exemplul 2:[edit | edit source]
- nrappin.txt
nrapp
- nrappout.txt
Datele de intrare nu corespund restrictiilor impuse
Rezolvare[edit | edit source]
<syntaxhighlight lang="python" line="1" start="1">
def validare(n, sir_v, q, intrebari, file_output): # functia de validare a datelor de intrare
if not 1 <= n <= 100000: raise ValueError for val in sir_v: if not 1 <= val <= 1000000: # fiecare element trebuie sa fie numar intreg intre 1 si 1.000.000 raise ValueError if q < 1: raise ValueError for intrebare in intrebari: if len(intrebare) != 2 or not isinstance(intrebare[1], int): raise ValueError file_output.write("Datele de intrare corespund restrictiilor impuse\n")
def solve(n, sir_v, intrebari): # functia de rezolvare
raspunsuri = [] for intrebare in intrebari: if intrebare[0] == 'D': y = intrebare[1] raspuns = n + 1 for x in range(y + 1, n + 1): if sir_v[x - 1] < sir_v[y - 1]: raspuns = x break raspunsuri.append(raspuns) elif intrebare[0] == 'S': y = intrebare[1] raspuns = 0 for x in range(y - 1, 0, -1): if sir_v[x - 1] < sir_v[y - 1]: raspuns = x break raspunsuri.append(raspuns) return raspunsuri
if __name__ == '__main__':
file_in = open('nrappin.txt', 'r') file_out = open('nrappout.txt', 'w')
try: N = int(file_in.readline()) v = list(map(int, file_in.readline().split())) Q = int(file_in.readline()) queries = [] for _ in range(Q): query = file_in.readline().split() queries.append((query[0], int(query[1])))
validare(N, v, Q, queries, file_out) answers = solve(N, v, queries)
for answer in answers: file_out.write(str(answer) + '\n')
except ValueError: file_out.write("Datele de intrare nu corespund restrictiilor impuse") except IndexError: file_out.write("Datele de intrare nu corespund restrictiilor impuse")
</syntaxhighlight>