<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1117_-_Volum</id>
	<title>1117 - Volum - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1117_-_Volum"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1117_-_Volum&amp;action=history"/>
	<updated>2026-05-01T04:39:51Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1117_-_Volum&amp;diff=9784&amp;oldid=prev</id>
		<title>Oros Ioana Diana at 07:39, 18 May 2024</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1117_-_Volum&amp;diff=9784&amp;oldid=prev"/>
		<updated>2024-05-18T07:39:03Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;//wiki.universitas.ro/index.php?title=1117_-_Volum&amp;amp;diff=9784&amp;amp;oldid=9282&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Oros Ioana Diana</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1117_-_Volum&amp;diff=9282&amp;oldid=prev</id>
		<title>Oros Ioana Diana: Pagină nouă: K.L. 2.0 și-a dorit o piscină pe un grid A cu N linii și M coloane. Cum K.L. 2.0 nu a fost foarte inspirat, el a uitat să își niveleze terenul înainte de a construi piscina, astfel încât fiecare celulă de coordonate (i, j) a gridului are o înalțime Ai,j (1 ≤ i ≤ N și 1 ≤ j ≤ M). La un moment dat începe o ploaie puternică, care umple piscina cu apă. După terminarea ploii, K.L. 2.0 se întreabă câtă apă are în piscină.  Dintr-o celulă apa se vars...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1117_-_Volum&amp;diff=9282&amp;oldid=prev"/>
		<updated>2024-01-08T22:50:36Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: K.L. 2.0 și-a dorit o piscină pe un grid A cu N linii și M coloane. Cum K.L. 2.0 nu a fost foarte inspirat, el a uitat să își niveleze terenul înainte de a construi piscina, astfel încât fiecare celulă de coordonate (i, j) a gridului are o înalțime Ai,j (1 ≤ i ≤ N și 1 ≤ j ≤ M). La un moment dat începe o ploaie puternică, care umple piscina cu apă. După terminarea ploii, K.L. 2.0 se întreabă câtă apă are în piscină.  Dintr-o celulă apa se vars...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;K.L. 2.0 și-a dorit o piscină pe un grid A cu N linii și M coloane. Cum K.L. 2.0 nu a fost foarte inspirat, el a uitat să își niveleze terenul înainte de a construi piscina, astfel încât fiecare celulă de coordonate (i, j) a gridului are o înalțime Ai,j (1 ≤ i ≤ N și 1 ≤ j ≤ M). La un moment dat începe o ploaie puternică, care umple piscina cu apă. După terminarea ploii, K.L. 2.0 se întreabă câtă apă are în piscină.&lt;br /&gt;
&lt;br /&gt;
Dintr-o celulă apa se varsă în celulele vecine cu care are o latură comună şi care au înălţimea strict mai mică decât celula curentă. Apa de pe marginea piscinei se scurge în exterior.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Pentru N, M și gridul A date, să se determine volumul de apă care a rămas în piscină.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare volumin.txt conține pe prima linie două numere naturale N și M, reprezentând dimensiunile grid-ului, iar pe fiecare dintre următoarele N linii se află câte M numere, reprezentând înălțimile terenului, separate prin câte un spațiu.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire volumout.txt va conține un singur număr, reprezentând volumul de apă care a rămas în piscină.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;3 ≤ N, M ≤ 752&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;0 ≤ Ai,j ≤ 109 + 2&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Pentru 30% din punctaj, &amp;#039;&amp;#039;&amp;#039;3 ≤ N, M ≤ 82&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
*Pentru 40% din punctaj, &amp;#039;&amp;#039;&amp;#039;0 ≤ Ai,j ≤ 103 + 2&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
*Volumul apei este suma unităţilor de apă care rămâne în celulele piscinei.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; volumin.txt&lt;br /&gt;
: 3 3&lt;br /&gt;
: 2 2 2&lt;br /&gt;
: 2 0 2&lt;br /&gt;
: 2 2 2&lt;br /&gt;
; volum.out&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicatie == &lt;br /&gt;
După ploaie rămân două unități de apă în celula cu înălțimea 0. Nu pot rămâne 3 unități, deoarece o unitate s-ar scurge prin una din cele 4 celule vecine în exteriorul piscinei.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; volumin.txt&lt;br /&gt;
: 3 3&lt;br /&gt;
: 3 3 3&lt;br /&gt;
: 3 0 2&lt;br /&gt;
: 3 3 3&lt;br /&gt;
; volumout.txt&lt;br /&gt;
: 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicatie == &lt;br /&gt;
După ploaie rămân două unități de apă în celula cu înălțimea 0. Nu pot rămâne 3 unități, deoarece o unitate s-ar scurge prin celula vecină cu valoarea 2 în exteriorul piscinei.&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1117 - Volum&lt;br /&gt;
def volum_apa(N, M, A):&lt;br /&gt;
    if not (3 &amp;lt;= N &amp;lt;= 752 and 3 &amp;lt;= M &amp;lt;= 752):&lt;br /&gt;
        return &amp;quot;Fals&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        for j in range(M):&lt;br /&gt;
            if not (0 &amp;lt;= A[i][j] &amp;lt;= 109 + 2):&lt;br /&gt;
                return &amp;quot;Fals&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]&lt;br /&gt;
&lt;br /&gt;
    def bfs(i, j):&lt;br /&gt;
        queue = [(i, j)]&lt;br /&gt;
        visited[i][j] = True&lt;br /&gt;
&lt;br /&gt;
        while queue:&lt;br /&gt;
            x, y = queue.pop(0)&lt;br /&gt;
&lt;br /&gt;
            for dx, dy in directions:&lt;br /&gt;
                nx, ny = x + dx, y + dy&lt;br /&gt;
&lt;br /&gt;
                if 0 &amp;lt;= nx &amp;lt; N and 0 &amp;lt;= ny &amp;lt; M and not visited[nx][ny]:&lt;br /&gt;
                    if A[nx][ny] &amp;lt; A[i][j]:&lt;br /&gt;
                        water_volume[0] += A[i][j] - A[nx][ny]&lt;br /&gt;
                        queue.append((nx, ny))&lt;br /&gt;
                        visited[nx][ny] = True&lt;br /&gt;
&lt;br /&gt;
    water_volume = [0]&lt;br /&gt;
    visited = [[False] * M for _ in range(N)]&lt;br /&gt;
&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        bfs(i, 0)&lt;br /&gt;
        bfs(i, M - 1)&lt;br /&gt;
&lt;br /&gt;
    for j in range(M):&lt;br /&gt;
        bfs(0, j)&lt;br /&gt;
        bfs(N - 1, j)&lt;br /&gt;
&lt;br /&gt;
    return water_volume[0]&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de intrare din fișierul &amp;quot;volumin.txt&amp;quot;&lt;br /&gt;
with open(&amp;quot;volumin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
    N, M = map(int, file.readline().split())&lt;br /&gt;
    A = [list(map(int, file.readline().split())) for _ in range(N)]&lt;br /&gt;
&lt;br /&gt;
# Calcularea volumului de apă rămas în piscină&lt;br /&gt;
result = volum_apa(N, M, A)&lt;br /&gt;
&lt;br /&gt;
# Scrierea rezultatului în fișierul &amp;quot;volumout.txt&amp;quot;&lt;br /&gt;
with open(&amp;quot;volumout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
    file.write(str(result))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Oros Ioana Diana</name></author>
	</entry>
</feed>