<?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=3949_-_mindist</id>
	<title>3949 - mindist - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3949_-_mindist"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3949_-_mindist&amp;action=history"/>
	<updated>2026-05-01T06:49:55Z</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=3949_-_mindist&amp;diff=7387&amp;oldid=prev</id>
		<title>Bonte Lucas Gabriel at 19:54, 15 November 2023</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3949_-_mindist&amp;diff=7387&amp;oldid=prev"/>
		<updated>2023-11-15T19:54:30Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;//wiki.universitas.ro/index.php?title=3949_-_mindist&amp;amp;diff=7387&amp;amp;oldid=7140&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3949_-_mindist&amp;diff=7140&amp;oldid=prev</id>
		<title>Bonte Lucas Gabriel: Pagină nouă: ==Cerința==  MăcGregăr se află într-o matrice pătratică cu &#039;&#039;&#039;N&#039;&#039;&#039; linii și &#039;&#039;&#039;N&#039;&#039;&#039; coloane. Aflându-se în celula &#039;&#039;&#039;(i, j)&#039;&#039;&#039; acesta se poate deplasa printr-un pas într-una din celulele &#039;&#039;&#039;(i + 1, j), (i, j + 1), (i - 1, j), (i, j - 1)&#039;&#039;&#039;. Sunt &#039;&#039;&#039;M&#039;&#039;&#039; celule distincte prin care el nu poate trece, deoarece sunt ocupate cu echipamentul lui sportiv. De asemenea, mai sunt &#039;&#039;&#039;K&#039;&#039;&#039; celule distincte, diferite de cele ocupate, în care se află proteina lui MăcGregăr....</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3949_-_mindist&amp;diff=7140&amp;oldid=prev"/>
		<updated>2023-11-06T17:59:07Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: ==Cerința==  MăcGregăr se află într-o matrice pătratică cu &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; linii și &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; coloane. Aflându-se în celula &amp;#039;&amp;#039;&amp;#039;(i, j)&amp;#039;&amp;#039;&amp;#039; acesta se poate deplasa printr-un pas într-una din celulele &amp;#039;&amp;#039;&amp;#039;(i + 1, j), (i, j + 1), (i - 1, j), (i, j - 1)&amp;#039;&amp;#039;&amp;#039;. Sunt &amp;#039;&amp;#039;&amp;#039;M&amp;#039;&amp;#039;&amp;#039; celule distincte prin care el nu poate trece, deoarece sunt ocupate cu echipamentul lui sportiv. De asemenea, mai sunt &amp;#039;&amp;#039;&amp;#039;K&amp;#039;&amp;#039;&amp;#039; celule distincte, diferite de cele ocupate, în care se află proteina lui MăcGregăr....&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
MăcGregăr se află într-o matrice pătratică cu &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; linii și &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; coloane. Aflându-se în celula &amp;#039;&amp;#039;&amp;#039;(i, j)&amp;#039;&amp;#039;&amp;#039; acesta se poate deplasa printr-un pas într-una din celulele &amp;#039;&amp;#039;&amp;#039;(i + 1, j), (i, j + 1), (i - 1, j), (i, j - 1)&amp;#039;&amp;#039;&amp;#039;. Sunt &amp;#039;&amp;#039;&amp;#039;M&amp;#039;&amp;#039;&amp;#039; celule distincte prin care el nu poate trece, deoarece sunt ocupate cu echipamentul lui sportiv. De asemenea, mai sunt &amp;#039;&amp;#039;&amp;#039;K&amp;#039;&amp;#039;&amp;#039; celule distincte, diferite de cele ocupate, în care se află proteina lui MăcGregăr. Pentru fiecare celulă din matrice din care acesta ar pleca, MăcGregăr se întreabă care este numărul minim de pași pentru a ajunge la cea mai apropiată proteină.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;mindist.in&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numerele &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;M&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;K&amp;#039;&amp;#039;&amp;#039; separate printr-un spațiu. Pe următoarele &amp;#039;&amp;#039;&amp;#039;M&amp;#039;&amp;#039;&amp;#039; linii se află câte două numere naturale reprezentând linia și coloana pe care se află o celulă ocupată. Pe următoarele &amp;#039;&amp;#039;&amp;#039;K&amp;#039;&amp;#039;&amp;#039; linii se află câte două numere naturale reprezentând linia și coloana pe care se află o proteină.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &amp;#039;&amp;#039;&amp;#039;mindist.out&amp;#039;&amp;#039;&amp;#039; va conține &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; linii, fiecare linie va conține &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; numere întregi, separate printr-un spațiu. Pe linia &amp;#039;&amp;#039;&amp;#039;i&amp;#039;&amp;#039;&amp;#039;, a &amp;#039;&amp;#039;&amp;#039;j&amp;#039;&amp;#039;&amp;#039;-a valoare reprezintă numărul minim de pași pentru a ajunge din celula &amp;#039;&amp;#039;&amp;#039;(i, j)&amp;#039;&amp;#039;&amp;#039; la cea mai apropiată proteină, dacă un astfel de drum există, &amp;#039;&amp;#039;&amp;#039;-1&amp;#039;&amp;#039;&amp;#039; altfel.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;1 ≤ M ≤ N * N&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;1 ≤ K ≤ N * N&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Pentru 30p, avem &amp;#039;&amp;#039;&amp;#039;1 ≤ N ≤ 50&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Pentru alte 30p, avem &amp;#039;&amp;#039;&amp;#039;1 ≤ N ≤ 1000&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;1 ≤ K ≤ 10&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Pentru restul de 40p, avem &amp;#039;&amp;#039;&amp;#039;1 ≤ N ≤ 1000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==Exemplu:==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;mindist.in&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
:4 5 3&lt;br /&gt;
:4 3&lt;br /&gt;
:2 1&lt;br /&gt;
:4 2&lt;br /&gt;
:4 1&lt;br /&gt;
:3 4&lt;br /&gt;
:3 3&lt;br /&gt;
:2 3&lt;br /&gt;
:1 1&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;mindist.out&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
:0 1 1 2 &lt;br /&gt;
:-1 1 0 1 &lt;br /&gt;
:2 1 0 -1 &lt;br /&gt;
:-1 -1 -1 -1 &lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from collections import deque&lt;br /&gt;
&lt;br /&gt;
def mindist(N, M, K, blocked, proteins):&lt;br /&gt;
    # Definim directiile in care se poate deplasa MacGregor&lt;br /&gt;
    dx = [-1, 0, 1, 0]&lt;br /&gt;
    dy = [0, 1, 0, -1]&lt;br /&gt;
&lt;br /&gt;
    # Initializam matricea cu -1&lt;br /&gt;
    matrix = [[-1 for _ in range(N)] for _ in range(N)]&lt;br /&gt;
&lt;br /&gt;
    # Initializam coada pentru BFS&lt;br /&gt;
    queue = deque()&lt;br /&gt;
&lt;br /&gt;
    # Marcam celulele blocate cu -2&lt;br /&gt;
    for b in blocked:&lt;br /&gt;
        matrix[b[0]-1][b[1]-1] = -2&lt;br /&gt;
&lt;br /&gt;
    # Adaugam proteinele in coada si le marcam cu 0 in matrice&lt;br /&gt;
    for p in proteins:&lt;br /&gt;
        queue.append((p[0]-1, p[1]-1))&lt;br /&gt;
        matrix[p[0]-1][p[1]-1] = 0&lt;br /&gt;
&lt;br /&gt;
    # Parcurgem coada&lt;br /&gt;
    while queue:&lt;br /&gt;
        x, y = queue.popleft()&lt;br /&gt;
        # Incercam sa ne deplasam in toate directiile&lt;br /&gt;
        for i in range(4):&lt;br /&gt;
            nx, ny = x + dx[i], y + dy[i]&lt;br /&gt;
            # Verificam daca noua pozitie este valida si nevizitata&lt;br /&gt;
            if nx &amp;gt;= 0 and nx &amp;lt; N and ny &amp;gt;= 0 and ny &amp;lt; N and matrix[nx][ny] == -1:&lt;br /&gt;
                # Actualizam distanta si adaugam pozitia in coada&lt;br /&gt;
                matrix[nx][ny] = matrix[x][y] + 1&lt;br /&gt;
                queue.append((nx, ny))&lt;br /&gt;
&lt;br /&gt;
    return matrix&lt;br /&gt;
&lt;br /&gt;
# Datele de intrare&lt;br /&gt;
N = 4&lt;br /&gt;
M = 5&lt;br /&gt;
K = 3&lt;br /&gt;
blocked = [(4, 3), (2, 1), (4, 2), (4, 1), (3, 4)]&lt;br /&gt;
proteins = [(3, 3), (2, 3), (1, 1)]&lt;br /&gt;
&lt;br /&gt;
# Apelam functia&lt;br /&gt;
result = mindist(N, M, K, blocked, proteins)&lt;br /&gt;
&lt;br /&gt;
# Scriem rezultatul in fisier&lt;br /&gt;
with open(&amp;#039;mindist.out&amp;#039;, &amp;#039;w&amp;#039;) as f:&lt;br /&gt;
    for row in result:&lt;br /&gt;
        f.write(&amp;#039; &amp;#039;.join(str(x) if x != -2 else &amp;#039;-1&amp;#039; for x in row))&lt;br /&gt;
        f.write(&amp;#039;\n&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
</feed>