<?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=3709_-_tri</id>
	<title>3709 - tri - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3709_-_tri"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3709_-_tri&amp;action=history"/>
	<updated>2026-05-01T08:47:38Z</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=3709_-_tri&amp;diff=8822&amp;oldid=prev</id>
		<title>Andrada378: Pagină nouă: == Enunț == Se citește un număr n și apoi n numere naturale. Numim secvență un grup de elemente aflate pe poziții consecutive în șirul citit. Numim tri-secvență o secvență care începe cu un element impar, se termină cu un element impar și care mai conține în interior exact un element impar. Astfel, fiecare tri-secvență include două secvențe maximale formate doar din elemente pare (eventual, fiecare dintre cele două poate fi vidă). Dezechilibrul unei tr...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3709_-_tri&amp;diff=8822&amp;oldid=prev"/>
		<updated>2024-01-02T23:50:09Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Enunț == Se citește un număr n și apoi n numere naturale. Numim secvență un grup de elemente aflate pe poziții consecutive în șirul citit. Numim tri-secvență o secvență care începe cu un element impar, se termină cu un element impar și care mai conține în interior exact un element impar. Astfel, fiecare tri-secvență include două secvențe maximale formate doar din elemente pare (eventual, fiecare dintre cele două poate fi vidă). Dezechilibrul unei tr...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunț ==&lt;br /&gt;
Se citește un număr n și apoi n numere naturale. Numim secvență un grup de elemente aflate pe poziții consecutive în șirul citit. Numim tri-secvență o secvență care începe cu un element impar, se termină cu un element impar și care mai conține în interior exact un element impar. Astfel, fiecare tri-secvență include două secvențe maximale formate doar din elemente pare (eventual, fiecare dintre cele două poate fi vidă). Dezechilibrul unei tri-secvențe se calculează astfel: determinăm suma elementelor din secvența din stânga formată doar din elemente pare, suma elementelor din secvența din dreapta formată doar din elemente pare și apoi diferența în modul a celor două valori (adică scădem din cea mare pe cea mică). Dacă vreuna dintre cele două secvențe de elemente pare este vidă, aceasta se consideră de sumă 0. Această diferență reprezintă dezechilibrul tri-secvenței.&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Să se determine o tri-secvența de dezechilibru minim. Dacă sunt mai multe astfel de tri-secvențe, să se determine cea care începe la o poziție cât mai mare.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare triin.txt conține pe prima linie un număr natural n ce reprezintă numărul de elemente ale șirului dat. Pe a doua linie sunt n numere naturale reprezentând elementele șirului, în ordinea crescătoare a pozițiilor, numerotate începând cu 1. În testele de intrare se dă n pe un rând iar elementele șirului pe rândul&lt;br /&gt;
&lt;br /&gt;
următor separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire tri.out va conține pe prima linie două numere naturale cuprinse între 1 și n (inclusiv), separate printr-un spațiu, reprezentând poziția de început, respectiv cea de final a tri-secvenței determinate.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 3 ≤ n ≤ 100.000&lt;br /&gt;
* 0 ≤ valoarea unui element ≤ 1.000.000.000&lt;br /&gt;
* Șirul conține cel puțin 3 elemente impare&lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;triin.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
16&lt;br /&gt;
&lt;br /&gt;
2 3 8 7 4 2 5 10 7 9 8 11 8 2 13 6&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;triout.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
10 15&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Avem 5 tri-secvențe: 3 8 7 4 2 5, cu dezechilibrul 2; 7 4 2 5 10 7, cu dezechilibrul 4; 5 10 7 9, cu&lt;br /&gt;
&lt;br /&gt;
dezechilibrul 10; 7 9 8 11, cu dezechilibrul 8; 9 8 11 8 2 13, cu dezechilibrul 2&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validare_intrare(n, arr):&lt;br /&gt;
    if not (3 &amp;lt;= n &amp;lt;= 100000):&lt;br /&gt;
        print(&amp;quot;Numărul de elemente trebuie să fie între 3 și 100.000.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if len(arr) != n:&lt;br /&gt;
        print(&amp;quot;Numărul de elemente din șir nu corespunde valorii specificate.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for x in arr:&lt;br /&gt;
        if not (0 &amp;lt;= x &amp;lt;= 1000000000):&lt;br /&gt;
            print(&amp;quot;Valorile trebuie să fie între 0 și 1.000.000.000.&amp;quot;)&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    numar_impare = sum(1 for x in arr if x % 2 != 0)&lt;br /&gt;
    if numar_impare &amp;lt; 3:&lt;br /&gt;
        print(&amp;quot;Șirul trebuie să conțină cel puțin 3 elemente impare.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gaseste_pozitii_diferenta_minima(n, arr):&lt;br /&gt;
    if not validare_intrare(n, arr):&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
    minim = 2000000000&lt;br /&gt;
    numar_impare = 0&lt;br /&gt;
    suma_curenta = 0&lt;br /&gt;
    suma_anterioara = 0&lt;br /&gt;
    primul = 0&lt;br /&gt;
    ultimul = 0&lt;br /&gt;
    poz_impar_anterior_anterior = 0&lt;br /&gt;
    poz_impar_anterior = 0&lt;br /&gt;
    diferenta = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, n + 1):&lt;br /&gt;
        x = arr[i - 1]&lt;br /&gt;
&lt;br /&gt;
        if x % 2 == 0:&lt;br /&gt;
            suma_curenta += x&lt;br /&gt;
        else:&lt;br /&gt;
            numar_impare += 1&lt;br /&gt;
&lt;br /&gt;
            if numar_impare &amp;gt;= 3:&lt;br /&gt;
                diferenta = suma_curenta - suma_anterioara&lt;br /&gt;
                diferenta = abs(diferenta)&lt;br /&gt;
&lt;br /&gt;
                if diferenta &amp;lt;= minim:&lt;br /&gt;
                    minim = diferenta&lt;br /&gt;
                    primul = poz_impar_anterior_anterior&lt;br /&gt;
                    ultimul = i&lt;br /&gt;
&lt;br /&gt;
            poz_impar_anterior_anterior = poz_impar_anterior&lt;br /&gt;
            poz_impar_anterior = i&lt;br /&gt;
            suma_anterioara = suma_curenta&lt;br /&gt;
            suma_curenta = 0&lt;br /&gt;
&lt;br /&gt;
    return primul, ultimul&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;triin.txt&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
        n = int(fin.readline())&lt;br /&gt;
        arr = list(map(int, fin.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    rezultat = gaseste_pozitii_diferenta_minima(n, arr)&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;triout.txt&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        if rezultat:&lt;br /&gt;
            fout.write(f&amp;quot;{rezultat[0]} {rezultat[1]}\n&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            fout.write(&amp;quot;Date de intrare invalide\n&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
</feed>