<?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=1119_-_Permutare_1</id>
	<title>1119 - Permutare 1 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1119_-_Permutare_1"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1119_-_Permutare_1&amp;action=history"/>
	<updated>2026-05-02T09:02:21Z</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=1119_-_Permutare_1&amp;diff=10014&amp;oldid=prev</id>
		<title>AjM: Pagină nouă: == Enunt == Se dă o matrice cu m linii şi n coloane, fiecare linie reprezentând o permutare. Se ştie că liniile de la 2 la m sunt permutări circulare ale primei linii. Unei linii x (1 ≤ x ≤ m) i se pot aplica următoarele operaţii:  * o permutare circulară la stânga: elementul de pe poziţia i (1 &lt; i ≤ n) se mută pe poziţia i-1, mai puţin primul primul element, care devine ultimul; * o permutare circulară la dreapta: elementul de pe pozitia i (1 ≤ i &lt; n)...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1119_-_Permutare_1&amp;diff=10014&amp;oldid=prev"/>
		<updated>2024-06-03T16:51:05Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Enunt == Se dă o matrice cu m linii şi n coloane, fiecare linie reprezentând o permutare. Se ştie că liniile de la 2 la m sunt permutări circulare ale primei linii. Unei linii x (1 ≤ x ≤ m) i se pot aplica următoarele operaţii:  * o permutare circulară la stânga: elementul de pe poziţia i (1 &amp;lt; i ≤ n) se mută pe poziţia i-1, mai puţin primul primul element, care devine ultimul; * o permutare circulară la dreapta: elementul de pe pozitia i (1 ≤ i &amp;lt; n)...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunt ==&lt;br /&gt;
Se dă o matrice cu m linii şi n coloane, fiecare linie reprezentând o permutare. Se ştie că liniile de la 2 la m sunt permutări circulare ale primei linii. Unei linii x (1 ≤ x ≤ m) i se pot aplica următoarele operaţii:&lt;br /&gt;
&lt;br /&gt;
* o permutare circulară la stânga: elementul de pe poziţia i (1 &amp;lt; i ≤ n) se mută pe poziţia i-1, mai puţin primul primul element, care devine ultimul;&lt;br /&gt;
* o permutare circulară la dreapta: elementul de pe pozitia i (1 ≤ i &amp;lt; n) se mută pe poziţia i+1, mai puţin ultimul element care devine primul.&lt;br /&gt;
Scopul este să permutăm circular liniile, la stânga sau la dreapta, astfel încât în final toate liniile să fie egale, folosind un număr minim de operaţii.&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Dându-se o matrice cu proprietatea din enunţ se cere să se determine numărul minim de operaţii necesare pentru a ajunge la o matrice în care toate liniile sunt egale.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare permutare1.in conține pe prima linie două numere naturale m şi n, reprezentând numărul de linii şi numărul de coloane ale matricei. Pe a doua linie a fişierului de intrare se află n numere naturale, reprezentând permutarea de pe prima linie a matricei. Pe următoarele m-1 linii, se află câte un număr natural cuprins între 0 şi n-1. Al i-lea (0 &amp;lt; i &amp;lt; m) dintre aceste numere reprezintă numărul de poziţii cu care este permutată circular la dreapta a (i+1) -a linie faţă de linia 1.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire permutare1.out va conține pe prima linie un singur număr natural reprezentând numărul minim de operaţii necesare.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n, m ≤ 100 000&lt;br /&gt;
* Două linii dintr-un tablou sunt egale dacă elementele aflate pe aceeaşi coloană sunt egale.&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
; permutare1.in&lt;br /&gt;
 pre.6 5&lt;br /&gt;
 3 1 4 2 6 5&lt;br /&gt;
 1&lt;br /&gt;
 1&lt;br /&gt;
 3&lt;br /&gt;
 3&lt;br /&gt;
; permutare1.out&lt;br /&gt;
 5&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Matricea va fi:&lt;br /&gt;
&lt;br /&gt;
  3 1 4 2 6 5&lt;br /&gt;
  5 3 1 4 2 6&lt;br /&gt;
  5 3 1 4 2 6&lt;br /&gt;
  2 6 5 3 1 4&lt;br /&gt;
  2 6 5 3 1 4&lt;br /&gt;
&lt;br /&gt;
Dacă permutăm circular la dreapta prima linie cu o poziţie, iar liniile 4 şi 5 le permutăm la stânga cu două poziţii, vom obţine din 5 operaţii o matrice cu toate liniile egale între ele. Liniile vor fi determinate de permutarea: 5 3 1 4 2 6.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def min_operations_to_equalize_first_row(matrix, n):&lt;br /&gt;
    first_row = matrix[0]&lt;br /&gt;
    min_operations = n&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        operations = 0&lt;br /&gt;
        for j in range(n):&lt;br /&gt;
            if matrix[i][j] != first_row[j]:&lt;br /&gt;
                operations += 1&lt;br /&gt;
        min_operations = min(min_operations, operations)&lt;br /&gt;
    return min_operations&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;permutare1.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
        m, n = map(int, fin.readline().split())&lt;br /&gt;
        matrix = [list(map(int, fin.readline().split())) for _ in range(m-1)]&lt;br /&gt;
&lt;br /&gt;
    min_ops = min_operations_to_equalize_first_row(matrix, n)&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;permutare1.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        fout.write(str(min_ops) + &amp;quot;\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>