Jump to content
Main menu
Main menu
move to sidebar
hide
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Bitnami MediaWiki
Search
Search
Create account
Log in
Personal tools
Create account
Log in
Pages for logged out editors
learn more
Contributions
Talk
Editing
3373 - culori4
Page
Discussion
English
Read
Edit
Edit source
View history
Tools
Tools
move to sidebar
hide
Actions
Read
Edit
Edit source
View history
General
What links here
Related changes
Special pages
Page information
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
== Enunț == Am o prietenă creatoare de modă. Pentru a-și realiza creațiile ea vopsește uneori materialele și mă roagă în prealabil să o ajut. Azi vrea să vopsească o pânză cu lungimea N cm folosind C nuanțe ale aceleiași culori, codificate de la 1 la C. Fiecare cm de pânză fiind colorat cu aceeași nuanță pe toată lățimea, va ieși o pânză în dungi. Inițial eu simulez cu ajutorul calculatorului vopsirea materialului, prietena mea începe apoi să intervină: de la cm A la cm B, trebuie modificată intensitatea culorii cu X puncte (intensitatea poate crește sau poate scădea, obținându-se astfel o altă nuanță). După nenumărate modificări de acest tip, să spunem M modificări, prietena mea va fi mulțumită și va trece la vopsirea efectivă a pânzei. == Cerința == Scrieţi un program care determină și afișează: 1. Lungimea maximă a unei bucăți de pânză de aceeași culoare după vopsirea inițială; 2. Cum va arăta pânza în urma modificărilor prietenei mele. == Date de intrare == Fișierul de intrare culoriin.txt conține pe prima linie cerința (1 sau 2). Linia următoare conține trei numere naturale C N M separate prin câte un spațiu, reprezentând numărul de culori, lungimea în cm a pânzei, respectiv numărul de modificări efectuate de prietena mea; următoarea linie conține N numere naturale separate prin câte un spațiu, c1 c2 c3 ... cN reprezentând culoarea fiecărui cm de pânză după vopsirea inițială, iar următoarele M linii conțin fiecare câte trei numere: două numere naturale A B, separate printr-un spațiu, reprezentând A – poziția la care începe și B – poziția finală la care se termină modificarea intensității și, separat printr-un spațiu, un număr întreg X reprezentând valoarea cu care se modifică intensitatea. == Date de ieșire == Fișierul de ieșire culoriout.txt va conține o singură linie pe care va fi scris un număr natural determinat conform cerinței, dacă cerința este 1 sau N numere naturale determinate conform cerinței, dacă cerința este 2. == Restricții și precizări == * 1 ⩽ '''N''' ⩽ 10.000 * 1 ⩽ '''C''' ⩽ 1.000.000 * 1 ⩽ '''M''' ⩽ 200.000 == Exemplul 1 == ; Intrare ; culoriin.txt : 1 : 3 8 2 : 1 1 2 2 2 2 3 3 : 2 5 1 : 5 8 -1 ; Ieșire : Datele de intrare corespund restricțiilor impuse ; culoriout.txt : 4 === Explicație === Cea mai lungă secvență de elemente egale este 2 2 2 2 și are 4 elemente == Exemplul 2 == ; Intrare ; culoriin.txt : 2 : 3 8 2 : 1 1 2 2 2 2 3 3 : 2 5 1 : 5 8 -1 ; Ieșire : Datele de intrare corespund restricțiilor impuse ; culoriout.txt : 1 2 3 3 2 1 2 2 === Explicație === După prima modificare vectorul este: 1 2 3 3 3 2 3 3. După a doua modificare este: 1 2 3 3 2 1 2 2. == Exemplul 3 == ; Intrare ; culoriin.txt : 1 : 3 10001 2 : 1 1 2 2 2 2 3 3 : 2 5 1 : 5 8 -1 ; Ieșire : Datele de intrare NU corespund restricțiilor impuse == Rezolvare == <syntaxhighlight lang="python" line> #3373 - Culori4 def valideaza_date_intrare(n, c, m, culori, modificari): # Funcție pentru validarea datelor de intrare if not (0 < n < 10001): return False if not (0 < c < 1000001): return False if not (0 < m < 200001): return False if len(culori) != n: return False for culoare in culori: if not (1 <= culoare <= c): return False for modificare in modificari: a, b, x = modificare if not (1 <= a <= b <= n): return False return True def proceseaza_cererea(cerere, c, n, culori, modificari): # Funcție pentru procesarea cererii și returnarea rezultatului if cerere == 1: # cerința 1: Lungimea maximă a unei bucăți de pânză de aceeași culoare după vopsirea inițială lungime_maxima = 1 lungime_curenta = 1 for i in range(1, n): if culori[i] == culori[i - 1]: lungime_curenta += 1 lungime_maxima = max(lungime_maxima, lungime_curenta) else: lungime_curenta = 1 return lungime_maxima elif cerere == 2: # cerința 2: cum va arăta pânza în urma modificărilor prietenei mele for modificare in modificari: a, b, x = modificare for i in range(a - 1, b): culori[i] = (culori[i] + x - 1) % c + 1 return culori def main(): # Funcție principală care citește datele de intrare și apelează funcțiile de validare și procesare with open('culoriin.txt', 'r') as fisier: cerere = int(fisier.readline().strip()) c, n, m = map(int, fisier.readline().split()) culori = list(map(int, fisier.readline().split())) modificari = [list(map(int, fisier.readline().split())) for _ in range(m)] if valideaza_date_intrare(n, c, m, culori, modificari): print("Datele de intrare corespund restricțiilor impuse") else: print("Datele de intrare NU corespund restricțiilor impuse") return rezultat = proceseaza_cererea(cerere, c, n, culori, modificari) with open('culoriout.txt', 'w') as fisier: if cerere == 1: fisier.write(str(rezultat)) elif cerere == 2: fisier.write(" ".join(map(str, rezultat))) if __name__ == "__main__": main() </syntaxhighlight>
Summary:
Please note that all contributions to Bitnami MediaWiki may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Bitnami MediaWiki:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Toggle limited content width