<?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=2961_-_Deminare</id>
	<title>2961 - Deminare - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2961_-_Deminare"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2961_-_Deminare&amp;action=history"/>
	<updated>2026-05-03T09:39:00Z</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=2961_-_Deminare&amp;diff=10192&amp;oldid=prev</id>
		<title>RaulOtet: Pagină nouă: Pe un teren de formă dreptunghiulară format din &lt;code&gt;L&lt;/code&gt; linii și &lt;code&gt;C&lt;/code&gt; coloane sunt plantate &lt;code&gt;M&lt;/code&gt; mine. Liniile sunt numerotate de sus în jos cu valori de la &lt;code&gt;1&lt;/code&gt; la &lt;code&gt;L&lt;/code&gt; iar coloanele sunt numerotate de la stânga la dreapta cu valori de la &lt;code&gt;1&lt;/code&gt; la &lt;code&gt;C&lt;/code&gt;. Deoarece războiul s-a terminat, specialiștii vor să demineze terenul și să-l redea utilizării publice. Mutarea unei mine reprezintă operația de tr...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2961_-_Deminare&amp;diff=10192&amp;oldid=prev"/>
		<updated>2024-07-28T08:57:09Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: Pe un teren de formă dreptunghiulară format din &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt; linii și &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; coloane sunt plantate &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; mine. Liniile sunt numerotate de sus în jos cu valori de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt; iar coloanele sunt numerotate de la stânga la dreapta cu valori de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;. Deoarece războiul s-a terminat, specialiștii vor să demineze terenul și să-l redea utilizării publice. Mutarea unei mine reprezintă operația de tr...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Pe un teren de formă dreptunghiulară format din &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt; linii și &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; coloane sunt plantate &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; mine. Liniile sunt numerotate de sus în jos cu valori de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt; iar coloanele sunt numerotate de la stânga la dreapta cu valori de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;. Deoarece războiul s-a terminat, specialiștii vor să demineze terenul și să-l redea utilizării publice. Mutarea unei mine reprezintă operația de transfer a unei mine de la linia &amp;lt;code&amp;gt;x1&amp;lt;/code&amp;gt; și coloana &amp;lt;code&amp;gt;y1&amp;lt;/code&amp;gt; la o poziție liberă, dată de linia &amp;lt;code&amp;gt;x2&amp;lt;/code&amp;gt; și coloana &amp;lt;code&amp;gt;y2&amp;lt;/code&amp;gt;, unde &amp;lt;code&amp;gt;1 ≤ x1, x2 ≤ L&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;1 ≤ y1, y2 ≤ C&amp;lt;/code&amp;gt;. Deoarece mutarea unei mine este periculoasă, trebuie determinat numărul minim de mine care trebuie mutate din poziția inițială astfel încât toate minele de pe teren să fie așezate unele lângă altele într-o zonă compactă dreptunghiulară, oriunde în cadrul terenului dat, pentru ca apoi să fie detonate împreună.&lt;br /&gt;
&lt;br /&gt;
Spre exemplu: dacă &amp;lt;code&amp;gt;L = 4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;C = 5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;M = 8&amp;lt;/code&amp;gt; și minele sunt așezate inițial conform figurii de mai jos (zonele colorate cu negru arată pozițiile minelor), pentru a se ajunge la o așezare a minelor într-o zonă compactă de formă dreptunghiulară numărul minim de mine mutate este &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Cunoscând numărul de linii &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt; și de coloane &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; ale terenului minat, numărul de mine &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt;, precum și poziția fiecărei mine, să se scrie un program care determină:&lt;br /&gt;
&lt;br /&gt;
1. linia sau liniile pe care se găsesc cele mai multe mine;&lt;br /&gt;
&lt;br /&gt;
2. numărul minim de mine mutate, pentru ca toate minele de pe teren să fie așezate într-o zonă compactă cu formă dreptunghiulară.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare este &amp;lt;code&amp;gt;deminare.in&amp;lt;/code&amp;gt; și conține:&lt;br /&gt;
&lt;br /&gt;
- pe prima linie numărul natural &amp;lt;code&amp;gt;V&amp;lt;/code&amp;gt; a cărui valoare poate fi doar &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
- pe a doua linie două numere naturale &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;, cu semnificația din enunț;&lt;br /&gt;
&lt;br /&gt;
- pe a treia linie numărul natural &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt;, cu semnificația din enunț;&lt;br /&gt;
&lt;br /&gt;
- pe fiecare din următoarele &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; linii, câte o pereche de valori &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;y&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1 ≤ i ≤ M&amp;lt;/code&amp;gt;, reprezentând linia, respectiv coloana, unde se află o mină;&lt;br /&gt;
&lt;br /&gt;
Numerele aflate pe aceeași linie a fișierului sunt separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire este &amp;lt;code&amp;gt;deminare.out&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui &amp;lt;code&amp;gt;V&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; atunci prima linie a fișierului de ieșire va conține numărul liniei pe care se găsesc cele mai multe mine. Dacă există două sau mai multe astfel de linii, se vor afișa toate numerele acestora, în ordine crescătoare, separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui &amp;lt;code&amp;gt;V&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; atunci fișierul de ieșire va conține pe prima linie numărul minim cerut de mine mutate. Dacă minele nu pot fi așezate într-o zonă compactă de formă dreptunghiulară, în fișierul de ieșire se va scrie valoarea &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ L, C ≤ 500&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ M ≤ L • C&amp;lt;/code&amp;gt;&lt;br /&gt;
* O zonă în care se află mine așezate pe coloane consecutive, pe aceeași linie sau așezate pe linii consecutive, pe aceeași coloană se consideră că formează o zonă compactă de formă dreptunghiulară.&lt;br /&gt;
* O zonă compactă de formă dreptunghiulară poate avea numărul de linii ocupate egal cu numărul de coloane ocupate.&lt;br /&gt;
* Pentru teste valorând &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt; de puncte, avem &amp;lt;code&amp;gt;V = 1&amp;lt;/code&amp;gt;&lt;br /&gt;
* Pentru teste valorând &amp;lt;code&amp;gt;70&amp;lt;/code&amp;gt; de puncte, avem &amp;lt;code&amp;gt;V = 2&amp;lt;/code&amp;gt;&lt;br /&gt;
* Pentru teste valorând &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt; de puncte, avem &amp;lt;code&amp;gt;V = 2&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;L • C ≤ 10.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Pentru teste valorând &amp;lt;code&amp;gt;32&amp;lt;/code&amp;gt; de puncte, avem &amp;lt;code&amp;gt;V = 2&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;L • C ≤ 100.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* În concurs s-au acordat &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; puncte din oficiu. Aici se acordă pentru exemplele din enunț.&lt;br /&gt;
&lt;br /&gt;
= Exemplul: =&lt;br /&gt;
&amp;lt;code&amp;gt;deminare.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 1&lt;br /&gt;
 4 5&lt;br /&gt;
 8&lt;br /&gt;
 1 2&lt;br /&gt;
 1 5&lt;br /&gt;
 2 1&lt;br /&gt;
 3 2&lt;br /&gt;
 3 5&lt;br /&gt;
 4 3&lt;br /&gt;
 4 4&lt;br /&gt;
 4 5&lt;br /&gt;
&amp;lt;code&amp;gt;deminare.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 4&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
&amp;lt;code&amp;gt;V = 1&amp;lt;/code&amp;gt;, deci se rezolvă doar cerința 1. &amp;lt;code&amp;gt;L = 4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;C = 5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;M = 8&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Minele sunt plasate la pozițiile &amp;lt;code&amp;gt;(1,2)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;(1,5)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;(2,1)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;(3,2)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;(3,5)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;(4,3)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;(4,4)&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;(4,5)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pe linia &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; sunt amplasate &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; mine;&lt;br /&gt;
&lt;br /&gt;
Pe linia &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; este amplasată &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; mină;&lt;br /&gt;
&lt;br /&gt;
Pe linia &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; sunt amplasate &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; mine;&lt;br /&gt;
&lt;br /&gt;
Pe linia &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; sunt amplasate &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; mine;&lt;br /&gt;
&lt;br /&gt;
Deci, există o singură linie pe care sunt amplasate un număr maxim de mine și anume linia &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def citire_date():&lt;br /&gt;
    L, C, M = map(int, input().split())&lt;br /&gt;
    mine = []&lt;br /&gt;
    for _ in range(M):&lt;br /&gt;
        x, y = map(int, input().split())&lt;br /&gt;
        mine.append((x-1, y-1))  # Ajustare la indexare zero-based&lt;br /&gt;
    return L, C, M, mine&lt;br /&gt;
&lt;br /&gt;
def linii_cu_cele_mai_multe_mine(L, mine):&lt;br /&gt;
    count_per_line = [0] * L&lt;br /&gt;
    for (x, y) in mine:&lt;br /&gt;
        count_per_line[x] += 1&lt;br /&gt;
    max_mine = max(count_per_line)&lt;br /&gt;
    linii_max = [i + 1 for i, count in enumerate(count_per_line) if count == max_mine]&lt;br /&gt;
    return linii_max&lt;br /&gt;
&lt;br /&gt;
def mutari_minime(L, C, mine):&lt;br /&gt;
    mine_set = set(mine)&lt;br /&gt;
    mine_positions = [(x, y) for x, y in mine]&lt;br /&gt;
    &lt;br /&gt;
    def mine_in_rect(x1, y1, x2, y2):&lt;br /&gt;
        count = 0&lt;br /&gt;
        for x in range(x1, x2 + 1):&lt;br /&gt;
            for y in range(y1, y2 + 1):&lt;br /&gt;
                if (x, y) in mine_set:&lt;br /&gt;
                    count += 1&lt;br /&gt;
        return count&lt;br /&gt;
    &lt;br /&gt;
    min_moves = float(&amp;#039;inf&amp;#039;)&lt;br /&gt;
    for x1 in range(L):&lt;br /&gt;
        for y1 in range(C):&lt;br /&gt;
            for x2 in range(x1, L):&lt;br /&gt;
                for y2 in range(y1, C):&lt;br /&gt;
                    total_in_rect = mine_in_rect(x1, y1, x2, y2)&lt;br /&gt;
                    if total_in_rect == len(mine):&lt;br /&gt;
                        min_moves = 0&lt;br /&gt;
                        break&lt;br /&gt;
                    current_moves = len(mine) - total_in_rect&lt;br /&gt;
                    min_moves = min(min_moves, current_moves)&lt;br /&gt;
    &lt;br /&gt;
    return min_moves&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    L, C, M, mine = citire_date()&lt;br /&gt;
    linii_max = linii_cu_cele_mai_multe_mine(L, mine)&lt;br /&gt;
    min_mutari = mutari_minime(L, C, mine)&lt;br /&gt;
    &lt;br /&gt;
    print(&amp;quot;Linii cu cele mai multe mine:&amp;quot;, &amp;quot; &amp;quot;.join(map(str, linii_max)))&lt;br /&gt;
    print(&amp;quot;Număr minim de mine mutate:&amp;quot;, min_mutari)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>RaulOtet</name></author>
	</entry>
</feed>