<?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=2432_-_Cruce</id>
	<title>2432 - Cruce - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2432_-_Cruce"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2432_-_Cruce&amp;action=history"/>
	<updated>2026-05-01T05:39:18Z</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=2432_-_Cruce&amp;diff=10189&amp;oldid=prev</id>
		<title>RaulOtet: Pagină nouă: Se consideră o matrice pătratică de dimensiune &lt;code&gt;N&lt;/code&gt;, conţinând numere naturale. Numim &#039;&#039;&#039;cruce de lăţime&#039;&#039;&#039; &lt;code&gt;K&lt;/code&gt; reuniunea mulțimii tuturor elementelor aflate pe &lt;code&gt;K&lt;/code&gt; linii consecutive ale matricei și a mulțimii tuturor elementelor aflate pe &lt;code&gt;K&lt;/code&gt; coloane consecutive ale matricei. Două elemente ale matricei se consideră distincte dacă sunt situate pe poziții distincte în matrice. Se acceptă şi forma degenerată a unei cr...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2432_-_Cruce&amp;diff=10189&amp;oldid=prev"/>
		<updated>2024-07-26T08:17:41Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: Se consideră o matrice pătratică de dimensiune &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, conţinând numere naturale. Numim &amp;#039;&amp;#039;&amp;#039;cruce de lăţime&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; reuniunea mulțimii tuturor elementelor aflate pe &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; linii consecutive ale matricei și a mulțimii tuturor elementelor aflate pe &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; coloane consecutive ale matricei. Două elemente ale matricei se consideră distincte dacă sunt situate pe poziții distincte în matrice. Se acceptă şi forma degenerată a unei cr...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Se consideră o matrice pătratică de dimensiune &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, conţinând numere naturale. Numim &amp;#039;&amp;#039;&amp;#039;cruce de lăţime&amp;#039;&amp;#039;&amp;#039; &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; reuniunea mulțimii tuturor elementelor aflate pe &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; linii consecutive ale matricei și a mulțimii tuturor elementelor aflate pe &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; coloane consecutive ale matricei. Două elemente ale matricei se consideră distincte dacă sunt situate pe poziții distincte în matrice. Se acceptă şi forma degenerată a unei cruci, în formă de &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt;, când una dintre liniile sau coloanele care formează crucea sunt chiar la marginea matricei. Vom defini &amp;#039;&amp;#039;&amp;#039;valoarea&amp;#039;&amp;#039;&amp;#039; unei cruci ca fiind suma elementelor din care aceasta este formată.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Scrieți un program care, pentru o valoare &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; dată, determină o cruce de lățime &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; a cărei valoare este maximă și poziția ei în matrice. Această poziție va fi exprimată prin perechea de indici reprezentând prima linie din cele &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; consecutive și prima coloană din cele &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; consecutive din care este formată crucea.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fişierul &amp;lt;code&amp;gt;cruce.in&amp;lt;/code&amp;gt; conţine pe prima linie numerele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;, iar pe următoarele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; linii câte &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere întregi reprezentând în ordine, pe linii, elementele matricei. Numerele de pe aceeaşi linie sunt separate prin câte un spaţiu.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fişierul &amp;lt;code&amp;gt;cruce.out&amp;lt;/code&amp;gt; va conţine trei numere &amp;lt;code&amp;gt;Vmax L C&amp;lt;/code&amp;gt;, separate prin câte un spaţiu, reprezentând valoarea maximă determinată pentru o cruce de lățime &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;, respectiv linia și coloana care exprimă poziția acesteia în matrice.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ N ≤ 500&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ K &amp;lt; N&amp;lt;/code&amp;gt;&lt;br /&gt;
* Numerele din matrice sunt din intervalul &amp;lt;code&amp;gt;[-5000, 5000]&amp;lt;/code&amp;gt;&lt;br /&gt;
* Liniile şi coloanele se indexează începând cu &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Dacă există mai  multe cruci de lățime &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; de valoare maximă, se va lua în considerare poziția cu indicele &amp;#039;&amp;#039;&amp;#039;liniei&amp;#039;&amp;#039;&amp;#039; mai mic, iar în caz de egalitate a liniilor poziția celei cu indicele &amp;#039;&amp;#039;&amp;#039;coloanei&amp;#039;&amp;#039;&amp;#039; mai mic.&lt;br /&gt;
* La olimpiadă s-au oferit 10 puncte din oficiu, aici vor fi date pe exemple.&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;cruce.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 5 2&lt;br /&gt;
 1 -2 3 -1 4&lt;br /&gt;
 -3 2 2 -2 -1&lt;br /&gt;
 1 2 3 4 5&lt;br /&gt;
 1 0 -7 1 1&lt;br /&gt;
 3 2 1 2 3&lt;br /&gt;
&amp;lt;code&amp;gt;cruce.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 23 2 4&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Elementele ce formează crucea de valoare maxima sunt:&lt;br /&gt;
&lt;br /&gt;
1 -2 3 &amp;lt;code&amp;gt;-1 4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;-3 2 2 -2 -1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1 2 3 4 5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
1 0 -7 &amp;lt;code&amp;gt;1 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3 2 1 &amp;lt;code&amp;gt;2 3&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 calculeaza_prefix_sum(matrice, N):&lt;br /&gt;
    prefix_sum = [[0] * (N + 1) for _ in range(N + 1)]&lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        for j in range(1, N + 1):&lt;br /&gt;
            prefix_sum[i][j] = matrice[i - 1][j - 1] \&lt;br /&gt;
                                + prefix_sum[i - 1][j] \&lt;br /&gt;
                                + prefix_sum[i][j - 1] \&lt;br /&gt;
                                - prefix_sum[i - 1][j - 1]&lt;br /&gt;
    return prefix_sum&lt;br /&gt;
&lt;br /&gt;
def suma_submatrice(prefix_sum, x1, y1, x2, y2):&lt;br /&gt;
    return (prefix_sum[x2][y2]&lt;br /&gt;
            - prefix_sum[x1 - 1][y2]&lt;br /&gt;
            - prefix_sum[x2][y1 - 1]&lt;br /&gt;
            + prefix_sum[x1 - 1][y1 - 1])&lt;br /&gt;
&lt;br /&gt;
def cruce_maxima(matrice, N, K):&lt;br /&gt;
    prefix_sum = calculeaza_prefix_sum(matrice, N)&lt;br /&gt;
    max_valoare = -1&lt;br /&gt;
    max_pos = (0, 0)&lt;br /&gt;
    &lt;br /&gt;
    for i in range(1, N - K + 2):&lt;br /&gt;
        for j in range(1, N - K + 2):&lt;br /&gt;
            # Suma liniilor K consecutive&lt;br /&gt;
            suma_linii = 0&lt;br /&gt;
            for r in range(K):&lt;br /&gt;
                suma_linii += suma_submatrice(prefix_sum, i + r, j, i + r, j + K - 1)&lt;br /&gt;
                &lt;br /&gt;
            # Suma coloanelor K consecutive&lt;br /&gt;
            suma_coloane = 0&lt;br /&gt;
            for c in range(K):&lt;br /&gt;
                suma_coloane += suma_submatrice(prefix_sum, i, j + c, i + K - 1, j + c)&lt;br /&gt;
                &lt;br /&gt;
            # Calculul valorii crucii&lt;br /&gt;
            suma_cruce = suma_linii + suma_coloane - suma_submatrice(prefix_sum, i, j, i + K - 1, j + K - 1)&lt;br /&gt;
            &lt;br /&gt;
            if suma_cruce &amp;gt; max_valoare:&lt;br /&gt;
                max_valoare = suma_cruce&lt;br /&gt;
                max_pos = (i, j)&lt;br /&gt;
    &lt;br /&gt;
    return max_valoare, max_pos&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    import sys&lt;br /&gt;
    input = sys.stdin.read&lt;br /&gt;
    data = input().split()&lt;br /&gt;
    &lt;br /&gt;
    N = int(data[0])&lt;br /&gt;
    K = int(data[1])&lt;br /&gt;
    matrice = []&lt;br /&gt;
    &lt;br /&gt;
    index = 2&lt;br /&gt;
    for _ in range(N):&lt;br /&gt;
        matrice.append([int(x) for x in data[index:index + N]])&lt;br /&gt;
        index += N&lt;br /&gt;
    &lt;br /&gt;
    max_valoare, max_pos = cruce_maxima(matrice, N, K)&lt;br /&gt;
    print(max_valoare)&lt;br /&gt;
    print(max_pos[0], max_pos[1])&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>