3499 - Secv011: Difference between revisions
Pagină nouă: Sursa: [https://www.pbinfo.ro/probleme/3499/secv011 - Secv011] ---- == Cerinţa == Se dă un șir '''A''' format din '''n''' elemente din mulțimea '''{0,1}'''. Numim secvență a șirului '''A''' orice succesiune de elemente situate pe poziții consecutive în șir. Numim secvență a șirului '''A''' orice succesiune de elemente situate pe poziții consecutive în șir. Să se determine numărul de secvențe ale șirului '''A''' ce conțin de două ori mai mulți de '''1'''... |
No edit summary |
||
Line 23: | Line 23: | ||
===Exemplul 2=== | ===Exemplul 2=== | ||
; secv011.in | ; secv011.in | ||
: | : 10 | ||
: | : 1 0 0 0 1 1 1 0 0 0 | ||
; Ieșire | ; Ieșire | ||
: Datele sunt corecte. | : Datele sunt corecte. | ||
; secv011.out | ; secv011.out | ||
: | : 2 | ||
===Exemplul 3=== | ===Exemplul 3=== | ||
; secv011.in | ; secv011.in | ||
Line 38: | Line 38: | ||
== Rezolvare == | == Rezolvare == | ||
<syntaxhighlight lang="python" line> | <syntaxhighlight lang="python" line> | ||
#0302 Secv011 | |||
def secv011(vector,n): | |||
f = open("secv011.out","w") | |||
contor = 0 | |||
zero = 0 | |||
unu = 0 | |||
for i in range(n): | |||
for j in range(i,n): | |||
if vector[j] == 0: | |||
zero += 1 | |||
else: | |||
unu +=1 | |||
if unu > 1 and unu == 2 * zero: | |||
contor += 1 | |||
zero = 0 | |||
unu = 0 | |||
f.write(str(contor)) | |||
def conform_restrictiilor(): | |||
with open('secv011.in') as f: | |||
n = int(f.readline().strip()) | |||
vector = list(map(int, f.read().split())) | |||
if not 1 <= n <= 100000: | |||
print("Datele nu sunt conform restricțiilor impuse.") | |||
exit() | |||
for x in vector: | |||
if x > 1: | |||
print("Datele nu sunt conform restricțiilor impuse.") | |||
exit() | |||
print("Datele sunt corecte.") | |||
return n, vector | |||
if __name__ == '__main__': | |||
n, vector= conform_restrictiilor() | |||
secv011(vector,n) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
==Explicaţie cod== | ==Explicaţie cod== |
Revision as of 08:05, 24 April 2023
Sursa: - Secv011
Cerinţa
Se dă un șir A format din n elemente din mulțimea {0,1}. Numim secvență a șirului A orice succesiune de elemente situate pe poziții consecutive în șir. Numim secvență a șirului A orice succesiune de elemente situate pe poziții consecutive în șir. Să se determine numărul de secvențe ale șirului A ce conțin de două ori mai mulți de 1 decât de 0.
Date de intrare
Pe prima linie a fișierului secv011.in se află numărul n. Pe următoarea linie se află cele n elemente ale șirului , separate prin câte un spațiu.
Date de ieșire
Dacă datele sunt introduse corect, pe ecran se va afișa: "Datele sunt corecte.", iar apoi in fișierul de ieșire secv011.out va conține pe prima linie numărul cerut. În caz contrar, se va afișa pe ecran: "Datele nu sunt comform restricțiilor impuse.".
Restricţii şi precizări
- 1 ≤ n ≤ 1.000.000
Exemple
Exemplul 1
- secv011.in
- 6
- 1 0 1 1 1 0
- Ieșire
- Datele sunt corecte.
- secv011.out
- 4
Exemplul 2
- secv011.in
- 10
- 1 0 0 0 1 1 1 0 0 0
- Ieșire
- Datele sunt corecte.
- secv011.out
- 2
Exemplul 3
- secv011.in
- 2
- 314441 41241241
- Ieșire
- Datele nu sunt comform restricțiilor impuse.
Rezolvare
<syntaxhighlight lang="python" line>
- 0302 Secv011
def secv011(vector,n):
f = open("secv011.out","w") contor = 0 zero = 0 unu = 0 for i in range(n): for j in range(i,n): if vector[j] == 0: zero += 1 else: unu +=1 if unu > 1 and unu == 2 * zero: contor += 1 zero = 0 unu = 0 f.write(str(contor))
def conform_restrictiilor():
with open('secv011.in') as f: n = int(f.readline().strip()) vector = list(map(int, f.read().split())) if not 1 <= n <= 100000: print("Datele nu sunt conform restricțiilor impuse.") exit() for x in vector: if x > 1: print("Datele nu sunt conform restricțiilor impuse.") exit() print("Datele sunt corecte.") return n, vector
if __name__ == '__main__':
n, vector= conform_restrictiilor() secv011(vector,n)
</syntaxhighlight>