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
0693 - Sahara
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!
== Enunt == Undeva, în deșertul Sahara, ilustrul biolog Sahraa Gaea a conceput și construit un sistem de irigații ingenios, sistem cu care își propune să irige o zonă deșertică dreptunghiulară bogată în nutrienți minerali. Zona deșertică este împărțită în N*M pătrate de latură unitate. În fiecare pătrat se află un dispozitiv de picurare ce asigură o anumită cantitate de apă în funcție de comanda primită de la centrul de control al sistemului. Sistemul de irigare este astfel conceput încât să irige (ude), pe baza unor comenzi automatizate, parcele dreptunghiulare ale regiunii deșertice. Orice parcelă are laturile paralele cu laturile zonei deșertice și este identificată prin coordonatele colțurilor stânga-sus (x1,y1), respectiv dreapta-jos (x2,y2). La fiecare comandă se specifică parcela care va fi udată și cantitatea de apă (exprimată în litri) cu care va fi irigat fiecare pătrat al acesteia. Un pătrat al zonei deșertice devine fertil dacă acumulează cel puțin Q litri de apă. == Cerința == Să se determine aria maximă a unei suprafețe conexe fertile. Prin aria unei suprafețe înțelegem numărul de pătrate ce compun suprafața. Orice două pătrate fertile care au o latură comună fac parte din aceeaşi suprafaţă conexă fertilă. == Date de intrare == Fişierul de intrare saharain.txt conţine pe prima linie trei numere naturale N M Q despărțite prin câte un spațiu, cu semnificația din enunț. Pe cea de-a doua linie a fișierului se găsește un număr natural T. Pe fiecare dintre următoarele T linii se află descrierea parcelelor udate sub forma: x1 y1 x2 y2 q , adică cinci numere naturale despărțite prin spațiu, unde x1 y1 x2 y2 reprezintă coordonatele colțurilor stânga-sus, respectiv dreapta-jos ale parcelei, q2 cantitatea de apă cu care va fi irigat fiecare pătrat al parcelei. == Date de ieșire == Fişierul de ieşire saharaout.txt va conține o singură valoare ce reprezintă aria maximă a unei suprafețe conexe fertile. == Restricții și precizări == *2 ⩽ N, M ⩽ 1000 *1 ⩽ x1 ⩽ x2 ⩽ N, 1 ⩽ y1 ⩽ y2 ⩽ M *1 ⩽ q ⩽ 1 000 *1 ⩽ Q ⩽ 10 000 *1 ⩽ T ⩽ 50 000 *Inițial zona deșertică nu conține ”apă”; *Pot exista suprafeţe conexe fertile formate dintr-un singur pătrat fertil; *Parcelele se pot suprapune. == Exemplu 1 == ;saharain.txt :8 7 5 :7 :1 1 3 6 1 :4 2 5 7 2 :2 3 4 7 3 :1 2 4 3 3 :5 1 6 3 4 :5 5 7 6 2 :6 4 8 7 3 ;saharaout.txt :10 <br> == Exemplu 2 == ;saharain.txt : 0 0 0 : 0 : Nu au fost respectate cerintele impuse <br> == Rezolvare == <syntaxhighlight lang="python" line> #0693 - Sahara def read_input(file_name): try: with open(file_name, 'r') as file: N, M, Q = map(int, file.readline().split()) T = int(file.readline()) parcels = [] for _ in range(T): x1, y1, x2, y2, q = map(int, file.readline().split()) parcels.append(((x1, y1), (x2, y2), q)) return N, M, Q, T, parcels except Exception as e: print(f"Nu au fost respectate cerințele impuse: {str(e)}") return None def write_output(file_name, result): with open(file_name, 'w') as file: if result is not None: file.write(str(result) + "\n") def max_connected_area(N, M, Q, parcels): area = [[0] * M for _ in range(N)] def flood_fill(x, y, current_area, visited): if x < 0 or x >= N or y < 0 or y >= M or visited[x][y] or area[x][y] < Q: return 0 visited[x][y] = True current_area += 1 directions = [(1, 0), (-1, 0), (0, 1), (0, -1)] for dx, dy in directions: current_area += flood_fill(x + dx, y + dy, 0, visited) return current_area max_area = 0 for parcel in parcels: (x1, y1), (x2, y2), q = parcel for i in range(x1 - 1, x2): for j in range(y1 - 1, y2): area[i][j] += q visited = [[False] * M for _ in range(N)] for i in range(N): for j in range(M): if not visited[i][j] and area[i][j] >= Q: current_area = flood_fill(i, j, 0, visited) max_area = max(max_area, current_area) return max_area def main(input_file, output_file): result = read_input(input_file) if result is not None: N, M, Q, T, parcels = result result = max_connected_area(N, M, Q, parcels) write_output(output_file, result) if __name__ == "__main__": main("saharain.txt", "saharaout.txt") </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