<?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=3282_%E2%80%93_Transform1</id>
	<title>3282 – Transform1 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3282_%E2%80%93_Transform1"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3282_%E2%80%93_Transform1&amp;action=history"/>
	<updated>2026-05-01T09:56:06Z</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=3282_%E2%80%93_Transform1&amp;diff=8929&amp;oldid=prev</id>
		<title>Corjuc Eunice: Pagină nouă: Fie un șir &lt;code&gt;a = a1&lt;/code&gt;, &lt;code&gt;a2&lt;/code&gt;, …, &lt;code&gt;aN&lt;/code&gt; de numere naturale, nu neapărat distincte, cuprinse între &lt;code&gt;1&lt;/code&gt; și &lt;code&gt;N&lt;/code&gt;. Fie de asemenea două numere naturale &lt;code&gt;x&lt;/code&gt; și &lt;code&gt;y&lt;/code&gt;. Se definește operația &lt;code&gt;transform(i)&lt;/code&gt; astfel: se determină valoarea &lt;code&gt;w = 1 + (x * i + y * ai) mod N&lt;/code&gt;, apoi toate elementele egale cu &lt;code&gt;ai&lt;/code&gt; din secvența &lt;code&gt;ai&lt;/code&gt;, &lt;code&gt;ai+1&lt;/code&gt;, …, &lt;code&gt;aN&lt;/cod...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3282_%E2%80%93_Transform1&amp;diff=8929&amp;oldid=prev"/>
		<updated>2024-01-03T21:37:59Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: Fie un șir &amp;lt;code&amp;gt;a = a1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a2&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;aN&amp;lt;/code&amp;gt; de numere naturale, nu neapărat distincte, cuprinse între &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;. Fie de asemenea două numere naturale &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;. Se definește operația &amp;lt;code&amp;gt;transform(i)&amp;lt;/code&amp;gt; astfel: se determină valoarea &amp;lt;code&amp;gt;w = 1 + (x * i + y * ai) mod N&amp;lt;/code&amp;gt;, apoi toate elementele egale cu &amp;lt;code&amp;gt;ai&amp;lt;/code&amp;gt; din secvența &amp;lt;code&amp;gt;ai&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ai+1&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;aN&amp;lt;/cod...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Fie un șir &amp;lt;code&amp;gt;a = a1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a2&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;aN&amp;lt;/code&amp;gt; de numere naturale, nu neapărat distincte, cuprinse între &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;. Fie de asemenea două numere naturale &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;. Se definește operația &amp;lt;code&amp;gt;transform(i)&amp;lt;/code&amp;gt; astfel: se determină valoarea &amp;lt;code&amp;gt;w = 1 + (x * i + y * ai) mod N&amp;lt;/code&amp;gt;, apoi toate elementele egale cu &amp;lt;code&amp;gt;ai&amp;lt;/code&amp;gt; din secvența &amp;lt;code&amp;gt;ai&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ai+1&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;aN&amp;lt;/code&amp;gt; își modifică valoarea în &amp;lt;code&amp;gt;w&amp;lt;/code&amp;gt;. De exemplu, pentru șirul &amp;lt;code&amp;gt;a=1, 7, 1, 7, 3, 4, 7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;x = 4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;y = 5&amp;lt;/code&amp;gt;, operația &amp;lt;code&amp;gt;transform(4)&amp;lt;/code&amp;gt; înseamnă că &amp;lt;code&amp;gt;w = 1+(4*4+5*7) mod 7 = 3&amp;lt;/code&amp;gt;, deci șirul devine &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; (toate elementele de la poziția &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; și egale cu &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; s-au modificat în &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;). După fiecare operație de tip transform se calculează suma elementelor șirului obținut.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Să se determine suma maximă care s-a obținut în șirul &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; efectuând pe rând asupra șirului operațiile &amp;lt;code&amp;gt;transform(1)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;transform(2)&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;transform(N)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;input.txt&amp;lt;/code&amp;gt; conține pe prima linie numerele naturale &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;. Pe linia a doua se găsesc, separate prin spațiu, elementele șirului &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;output.txt&amp;lt;/code&amp;gt; va conține pe prima linie un singur număr natural reprezentând suma maximă obținută.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;3 ≤ N ≤ 256.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ x, y ≤ N&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
input.txt:&lt;br /&gt;
&lt;br /&gt;
7 4 5&lt;br /&gt;
&lt;br /&gt;
1 7 1 7 3 4 7&lt;br /&gt;
&lt;br /&gt;
ouput.txt:&lt;br /&gt;
&lt;br /&gt;
35&lt;br /&gt;
&lt;br /&gt;
Explicație:&lt;br /&gt;
&lt;br /&gt;
După &amp;lt;code&amp;gt;transform(1)&amp;lt;/code&amp;gt;, în care w = 3, șirul devine &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; care are suma &amp;lt;code&amp;gt;34&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
După &amp;lt;code&amp;gt;transform(2)&amp;lt;/code&amp;gt;, în care &amp;lt;code&amp;gt;w = 2&amp;lt;/code&amp;gt;, șirul devine &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; care are suma &amp;lt;code&amp;gt;19&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
După &amp;lt;code&amp;gt;transform(3)&amp;lt;/code&amp;gt;, în care &amp;lt;code&amp;gt;w = 7&amp;lt;/code&amp;gt;, șirul devine &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; care are suma &amp;lt;code&amp;gt;27&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
După &amp;lt;code&amp;gt;transform(4)&amp;lt;/code&amp;gt;, în care &amp;lt;code&amp;gt;w = 6&amp;lt;/code&amp;gt;, șirul devine &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; care are suma &amp;lt;code&amp;gt;35&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
După &amp;lt;code&amp;gt;transform(5)&amp;lt;/code&amp;gt;, în care &amp;lt;code&amp;gt;w = 7&amp;lt;/code&amp;gt;, șirul devine &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; care are suma &amp;lt;code&amp;gt;35&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
După &amp;lt;code&amp;gt;transform(6)&amp;lt;/code&amp;gt;, în care &amp;lt;code&amp;gt;w = 3&amp;lt;/code&amp;gt;, șirul devine &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; care are suma &amp;lt;code&amp;gt;34&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
După &amp;lt;code&amp;gt;transform(7)&amp;lt;/code&amp;gt;, în care &amp;lt;code&amp;gt;w = 3&amp;lt;/code&amp;gt;, șirul devine &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; care are suma &amp;lt;code&amp;gt;31&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Suma maximă care s-a obținut este &amp;lt;code&amp;gt;35&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
input.txt:&lt;br /&gt;
&lt;br /&gt;
999999999 4 5&lt;br /&gt;
&lt;br /&gt;
1 7 1 7 3 4 7&lt;br /&gt;
&lt;br /&gt;
Output:&lt;br /&gt;
&lt;br /&gt;
Invalid input. Please make sure 3 ≤ N ≤ 256000 and 1 ≤ x, y ≤ N.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
N = 260001&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, x, y):&lt;br /&gt;
    if 3 &amp;lt;= n &amp;lt;= 256000 and 1 &amp;lt;= x &amp;lt;= n and 1 &amp;lt;= y &amp;lt;= n:&lt;br /&gt;
        return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;input.txt&amp;quot;, &amp;quot;r&amp;quot;) as input_file, open(&amp;quot;output.txt&amp;quot;, &amp;quot;w&amp;quot;) as output_file:&lt;br /&gt;
        n, x, y = map(int, input_file.readline().split())&lt;br /&gt;
        a = list(map(int, input_file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        if not validate_input(n, x, y):&lt;br /&gt;
            print(&amp;quot;Invalid input. Please make sure 3 ≤ N ≤ 256000 and 1 ≤ x, y ≤ N.&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        S = 0&lt;br /&gt;
        Rad = [0] * N&lt;br /&gt;
        Val = [0] * N&lt;br /&gt;
        tata = [0] * N&lt;br /&gt;
        Card = [0] * N&lt;br /&gt;
&lt;br /&gt;
        for i in range(1, n + 1):&lt;br /&gt;
            S += a[i - 1]&lt;br /&gt;
&lt;br /&gt;
        for i in range(n, 0, -1):&lt;br /&gt;
            if not Rad[a[i - 1]]:&lt;br /&gt;
                Rad[a[i - 1]] = i&lt;br /&gt;
                Val[i] = a[i - 1]&lt;br /&gt;
            tata[i] = Rad[a[i - 1]]&lt;br /&gt;
            Card[a[i - 1]] += 1&lt;br /&gt;
&lt;br /&gt;
        Sol = 0&lt;br /&gt;
        for i in range(1, n + 1):&lt;br /&gt;
            nod = i&lt;br /&gt;
            while nod != tata[nod]:&lt;br /&gt;
                nod = tata[nod]&lt;br /&gt;
            val1 = Val[nod]&lt;br /&gt;
            val2 = 1 + (i * x + val1 * y) % n&lt;br /&gt;
            rad2 = Rad[val2]&lt;br /&gt;
&lt;br /&gt;
            if val1 == val2:&lt;br /&gt;
                Card[val1] -= 1&lt;br /&gt;
                if Card[val1] == 0:&lt;br /&gt;
                    Val[nod] = 0&lt;br /&gt;
                    Rad[val1] = 0&lt;br /&gt;
            else:&lt;br /&gt;
                S = S + Card[val1] * (val2 - val1)&lt;br /&gt;
                Card[val2] = Card[val2] + Card[val1] - 1&lt;br /&gt;
                Card[val1] = 0&lt;br /&gt;
&lt;br /&gt;
                if nod &amp;lt; rad2:&lt;br /&gt;
                    tata[nod] = rad2&lt;br /&gt;
                    Rad[val2] = rad2&lt;br /&gt;
                    Val[rad2] = val2&lt;br /&gt;
                    Rad[val1] = 0&lt;br /&gt;
                    Val[nod] = 0&lt;br /&gt;
                else:&lt;br /&gt;
                    tata[rad2] = nod&lt;br /&gt;
                    Rad[val2] = nod&lt;br /&gt;
                    Val[nod] = val2&lt;br /&gt;
                    Rad[val1] = 0&lt;br /&gt;
                    Val[rad2] = 0&lt;br /&gt;
&lt;br /&gt;
            tata[i] = 0&lt;br /&gt;
            Sol = max(Sol, S)&lt;br /&gt;
&lt;br /&gt;
        output_file.write(str(Sol))&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>Corjuc Eunice</name></author>
	</entry>
</feed>