<?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=4197_-_AB</id>
	<title>4197 - AB - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=4197_-_AB"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4197_-_AB&amp;action=history"/>
	<updated>2026-05-01T12:34:49Z</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=4197_-_AB&amp;diff=10197&amp;oldid=prev</id>
		<title>RaulOtet: Pagină nouă: Alice tocmai s-a decis să-și impresioneze fratele mai mic, Bob, cu abilitățile sale de deducție matematică. Astfel, ea așează într-o matrice cu &lt;code&gt;N&lt;/code&gt; linii și &lt;code&gt;M&lt;/code&gt; coloane toate numerele &lt;code&gt;1&lt;/code&gt;, &lt;code&gt;2&lt;/code&gt;, …, &lt;code&gt;N × M&lt;/code&gt;, astfel încât fiecare linie și respectiv fiecare coloană, să fie sortată strict crescător. O matrice cu aceste proprietăți se numește o &#039;&#039;&#039;matrice AB&#039;&#039;&#039;. Alice îi cere apoi lui Bob să elimine &lt;co...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4197_-_AB&amp;diff=10197&amp;oldid=prev"/>
		<updated>2024-07-30T15:03:46Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: Alice tocmai s-a decis să-și impresioneze fratele mai mic, Bob, cu abilitățile sale de deducție matematică. Astfel, ea așează într-o matrice cu &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; linii și &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; coloane toate numerele &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;N × M&amp;lt;/code&amp;gt;, astfel încât fiecare linie și respectiv fiecare coloană, să fie sortată strict crescător. O matrice cu aceste proprietăți se numește o &amp;#039;&amp;#039;&amp;#039;matrice AB&amp;#039;&amp;#039;&amp;#039;. Alice îi cere apoi lui Bob să elimine &amp;lt;co...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Alice tocmai s-a decis să-și impresioneze fratele mai mic, Bob, cu abilitățile sale de deducție matematică. Astfel, ea așează într-o matrice cu &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; linii și &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; coloane toate numerele &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;N × M&amp;lt;/code&amp;gt;, astfel încât fiecare linie și respectiv fiecare coloană, să fie sortată strict crescător. O matrice cu aceste proprietăți se numește o &amp;#039;&amp;#039;&amp;#039;matrice AB&amp;#039;&amp;#039;&amp;#039;. Alice îi cere apoi lui Bob să elimine &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; valori din matrice, care sa nu fie adiacente orizontal sau adiacente vertical. Apoi, ea va încerca să reintroducă aceste &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; valori în matrice astfel încât sa rămână o matrice AB. După câteva încercări, Alice realizează că, în anumite situații pot exista mai multe moduri de a aranja cele &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; numere pe pozițiile libere.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Scrieți un program care, cunoscând matricea AB inițială și &amp;lt;code&amp;gt;Q&amp;lt;/code&amp;gt; interogări, constând fiecare dintr-o listă de elemente eliminate din matrice, determină pentru fiecare interogare dacă există o soluție unică de a aranja elementele eliminate în matrice astfel încât aceasta să fie matrice AB.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Prima linie a datelor de intrare conține trei numere naturale &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;Q&amp;lt;/code&amp;gt;, separate prin câte un spațiu, având semnificația din enunț. Pe următoarele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; linii se află câte &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; valori, separate prin câte un spațiu, reprezentând matricea AB construită de Alice. Urmează apoi &amp;lt;code&amp;gt;Q&amp;lt;/code&amp;gt; interogări, fiecare interogare fiind descrisă pe două linii. Prima linie care descrie o interogare conține numărul natural &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;, reprezentând numărul de valori eliminate de către Bob. Pe a doua linie din descrierea interogării se află cele &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; numere eliminate, separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Veți afișa &amp;lt;code&amp;gt;Q&amp;lt;/code&amp;gt; linii, fiecare reprezentând un număr întreg. Cea de a &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;-a linie va conține răspunsul pentru a &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;-a interogare: răspunsul va fi &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; dacă există o soluție unică de a aranja elementele eliminate astfel încât să se obțină o matrice AB, respectiv &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; în caz contrar.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ N, M ≤ 2.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ Q ≤ 25&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;K ≥ 1&amp;lt;/code&amp;gt;&lt;br /&gt;
* Se garantează că în orice interogare numerele eliminate sunt distincte și respectă condiția din enunț (nu sunt adiacente orizontal sau vertical).&lt;br /&gt;
* Numărul total al valorilor din interogări nu depășește &amp;lt;code&amp;gt;4.000.000&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Punctajul pentru un test va fi acordat doar dacă răspunsurile pentru toate interogările din testul respectiv sunt corecte.&lt;br /&gt;
* Datorită dimensiunilor mari ale datelor de intrare, doar unele teste au fost adăugate.&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Intrare&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 3 3 2&lt;br /&gt;
 1 2 4&lt;br /&gt;
 3 5 8&lt;br /&gt;
 6 7 9&lt;br /&gt;
 3&lt;br /&gt;
 1 5 9&lt;br /&gt;
 3&lt;br /&gt;
 5 4 6&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ieșire&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 1&lt;br /&gt;
 0&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Prima interogare presupune eliminarea numerelor &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;, matricea după eliminare arătând astfel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;? 2 4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;3 ? 8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;6 7 ?&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se observă că aranjarea celor trei numere este unică, obținându-se matricea originală.&lt;br /&gt;
&lt;br /&gt;
A doua interogare presupune eliminarea valorilor &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1 2 ?&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;3 ? 8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;? 7 9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rearanjarea nu este unică, o soluție alternativă fiind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1 2 5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;3 6 8&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;4 7 9&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 is_unique_solution(N, M, queries):&lt;br /&gt;
    results = []&lt;br /&gt;
    for query in queries:&lt;br /&gt;
        if len(query) == 0:&lt;br /&gt;
            results.append(&amp;quot;YES&amp;quot;)&lt;br /&gt;
            continue&lt;br /&gt;
        &lt;br /&gt;
        positions = [(val - 1) // M, (val - 1) % M for val in query]&lt;br /&gt;
        sorted_query = sorted(query)&lt;br /&gt;
        &lt;br /&gt;
        for i in range(1, len(sorted_query)):&lt;br /&gt;
            pos1 = positions[sorted_query[i-1] - 1]&lt;br /&gt;
            pos2 = positions[sorted_query[i] - 1]&lt;br /&gt;
            &lt;br /&gt;
            if pos1[0] == pos2[0] and pos1[1] + 1 == pos2[1]:&lt;br /&gt;
                results.append(&amp;quot;NO&amp;quot;)&lt;br /&gt;
                break&lt;br /&gt;
            if pos1[1] == pos2[1] and pos1[0] + 1 == pos2[0]:&lt;br /&gt;
                results.append(&amp;quot;NO&amp;quot;)&lt;br /&gt;
                break&lt;br /&gt;
        else:&lt;br /&gt;
            results.append(&amp;quot;YES&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    return results&lt;br /&gt;
&lt;br /&gt;
# Example usage:&lt;br /&gt;
N, M = 3, 3&lt;br /&gt;
queries = [&lt;br /&gt;
    [5, 7, 9],&lt;br /&gt;
    [1, 3, 6],&lt;br /&gt;
    [2, 4, 8]&lt;br /&gt;
]&lt;br /&gt;
print(is_unique_solution(N, M, queries))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>RaulOtet</name></author>
	</entry>
</feed>