<?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=1206_-_Placa</id>
	<title>1206 - Placa - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1206_-_Placa"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1206_-_Placa&amp;action=history"/>
	<updated>2026-05-01T04:39:27Z</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=1206_-_Placa&amp;diff=10044&amp;oldid=prev</id>
		<title>AjM: Pagină nouă: == Enunt == Un gard este format din mai multe plăci dreptunghiulare. Fiecare placă este, la rândul ei, construită din NxM cărămizi. Una dintre plăci ridică o problemă, deoarece este deteriorată. Placa este reprezentată pe hârtie cu ajutorul unei matrice cu N linii și M coloane, numerotate de la 1 la N, respectiv de la 1 la M. Matricea conține doar valori 0 și 1, și respectă următoarele reguli:  * un element egal cu 1 indică prezența în aceea poziție a un...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1206_-_Placa&amp;diff=10044&amp;oldid=prev"/>
		<updated>2024-06-03T17:30:27Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Enunt == Un gard este format din mai multe plăci dreptunghiulare. Fiecare placă este, la rândul ei, construită din NxM cărămizi. Una dintre plăci ridică o problemă, deoarece este deteriorată. Placa este reprezentată pe hârtie cu ajutorul unei matrice cu N linii și M coloane, numerotate de la 1 la N, respectiv de la 1 la M. Matricea conține doar valori 0 și 1, și respectă următoarele reguli:  * un element egal cu 1 indică prezența în aceea poziție a un...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunt ==&lt;br /&gt;
Un gard este format din mai multe plăci dreptunghiulare. Fiecare placă este, la rândul ei, construită din NxM cărămizi. Una dintre plăci ridică o problemă, deoarece este deteriorată. Placa este reprezentată pe hârtie cu ajutorul unei matrice cu N linii și M coloane, numerotate de la 1 la N, respectiv de la 1 la M. Matricea conține doar valori 0 și 1, și respectă următoarele reguli:&lt;br /&gt;
&lt;br /&gt;
* un element egal cu 1 indică prezența în aceea poziție a unei cărămizi, iar un element egal cu 0 indică absența ei;&lt;br /&gt;
* linia 1 și linia N conțin numai valori egale cu 1, pentru că marginea de sus și cea de jos a plăcii este intactă;&lt;br /&gt;
* din orice element egal cu 1, situat în interiorul matricei, se poate ajunge pe linia 1 sau pe linia N sau pe amândouă, mergând doar în sus sau doar în jos, parcurgând numai valorile egale cu 1;&lt;br /&gt;
* există cel puțin o coloană stabilă (formată numai din elemente egale cu 1).&lt;br /&gt;
Se dorește modificarea plăcii și pentru aceasta se pot șterge din matrice maximum K coloane alăturate. După ștergere se alipesc coloanele rămase și se deplasează pe verticală partea de sus a plăcii spre cea de jos, până când se va forma o coloană stabilă.&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Să se determine înălțimea minimă Hmin pe care o poate avea placa ștergând cel mult K coloane alăturate. Identificați numărul minim de coloane alăturate care trebuie șterse pentru a obține înălțimea Hmin.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Din fișierul placa.in se citesc de pe prima linie 3 numere naturale N, M, K separate prin câte un spațiu, având semnificația din enunț. Pe fiecare dintre următoarele M linii ale fișierului se găsesc perechi de numere naturale N1, N2, separate printr-un spațiu. Astfel pe linia i+1 a fișierului de intrare numărul N1 reprezintă numărul de elemente de 1 situate pe coloana i, începând cu linia 1, deplasându-ne în „jos” până la întâlnirea unei valori egale cu 0, sau până se ajunge pe linia N; numărul N2 reprezintă numărul de elemente de 1 situate pe coloana i, începând cu linia N, deplasându-ne în „sus” până la întâlnirea unei valori egale cu 0, sau până se ajunge pe linia 1.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
În fișierul placa.out se va scrie pe prima linie înălțimea minimă cerută Hmin, iar pe a doua linie numărul minim de coloane ce trebuie eliminate pentru a obține înălțimea Hmin.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ N ≤ 100.000; 1 ≤ M ≤ 100.000; 1 ≤ K &amp;lt; M;&lt;br /&gt;
* se garantează că pe liniile ce conțin informații referitoare la cele M coloane ale matricei există cel puțin o linie pe care se află valoarea N de 2 ori, în rest suma celor două valori este strict mai mică decât N;&lt;br /&gt;
* toate valorile din fișier sunt strict pozitive;&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; placa.in&lt;br /&gt;
 5 6 3&lt;br /&gt;
 1 1&lt;br /&gt;
 2 1&lt;br /&gt;
 1 2&lt;br /&gt;
 5 5&lt;br /&gt;
 1 3&lt;br /&gt;
 1 1&lt;br /&gt;
; placa.out&lt;br /&gt;
 3&lt;br /&gt;
 2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Matricea inițială:&lt;br /&gt;
&lt;br /&gt;
  1 1 1 1 1 1&lt;br /&gt;
  0 1 0 1 0 0&lt;br /&gt;
  0 0 0 1 1 0&lt;br /&gt;
  0 0 1 1 1 0&lt;br /&gt;
  1 1 1 1 1 1&lt;br /&gt;
Înălțimea minimă este 3 și se poate obține eliminând, de exemplu, coloanele 3, 4, 5 rezultând matricea:&lt;br /&gt;
&lt;br /&gt;
  1 1 1&lt;br /&gt;
  0 1 0&lt;br /&gt;
  1 1 1&lt;br /&gt;
O altă modalitate de a obține aceeași înălțime dar prin ștergerea unui număr minim de coloane (4 și 5) conduce la:&lt;br /&gt;
&lt;br /&gt;
  1 1 1 1&lt;br /&gt;
  0 1 1 0&lt;br /&gt;
  1 1 1 1&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def can_obtain_height(board, k, height):&lt;br /&gt;
    n, m = len(board), len(board[0])&lt;br /&gt;
    &lt;br /&gt;
    # Numărăm coloanele consecutive cu 0 de la început și sfârșit&lt;br /&gt;
    zeros_left = [0] * m&lt;br /&gt;
    zeros_right = [0] * m&lt;br /&gt;
    &lt;br /&gt;
    for j in range(m):&lt;br /&gt;
        for i in range(n):&lt;br /&gt;
            if board[i][j] == 1:&lt;br /&gt;
                break&lt;br /&gt;
            zeros_left[j] += 1&lt;br /&gt;
        &lt;br /&gt;
        for i in range(n - 1, -1, -1):&lt;br /&gt;
            if board[i][j] == 1:&lt;br /&gt;
                break&lt;br /&gt;
            zeros_right[j] += 1&lt;br /&gt;
    &lt;br /&gt;
    # Verificăm dacă putem elimina cel mult k coloane pentru a obține înălțimea height&lt;br /&gt;
    for j in range(1, m):&lt;br /&gt;
        if zeros_left[j] + zeros_right[j] &amp;gt;= height:&lt;br /&gt;
            continue&lt;br /&gt;
        removed = 0&lt;br /&gt;
        for jj in range(j, min(j + k, m)):&lt;br /&gt;
            removed += min(zeros_left[jj], height - zeros_right[jj])&lt;br /&gt;
            if removed &amp;gt; k:&lt;br /&gt;
                break&lt;br /&gt;
        if removed &amp;lt;= k:&lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def min_height(board, k):&lt;br /&gt;
    low, high = 2, len(board)&lt;br /&gt;
    while low &amp;lt; high:&lt;br /&gt;
        mid = (low + high) // 2&lt;br /&gt;
        if can_obtain_height(board, k, mid):&lt;br /&gt;
            high = mid&lt;br /&gt;
        else:&lt;br /&gt;
            low = mid + 1&lt;br /&gt;
    return low&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;placa.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
        N, M, K = map(int, fin.readline().split())&lt;br /&gt;
        board = [list(map(int, fin.readline().split())) for _ in range(M)]&lt;br /&gt;
&lt;br /&gt;
    min_h = min_height(board, K)&lt;br /&gt;
&lt;br /&gt;
    removed_cols = min(K, max(0, min_h - 2))&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;placa.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        fout.write(f&amp;quot;{min_h}\n&amp;quot;)&lt;br /&gt;
        fout.write(f&amp;quot;{removed_cols}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AjM</name></author>
	</entry>
</feed>