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