<?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=2047_-_Ghinde</id>
	<title>2047 - Ghinde - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2047_-_Ghinde"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2047_-_Ghinde&amp;action=history"/>
	<updated>2026-05-01T06:48:27Z</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=2047_-_Ghinde&amp;diff=8868&amp;oldid=prev</id>
		<title>Andrada378: Pagină nouă: == Enunț == Scrat și Scratte sunt două veverițe devoratoare de ghinde. Ele trăiesc într-un stejar înalt și culeg ghinde din cele N ramuri ale acestuia. Veverițele vor organiza un concurs: cine culege cele mai multe ghinde în K ture. Într-o tură,  fiecare veveriță se va deplasa de la vizuină până la o ramură a stejarului, de unde va culege cât mai multe ghinde, dar  nu mai mult de M ghinde, după care va reveni în vizuină. Veverițele vor efectua alternati...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2047_-_Ghinde&amp;diff=8868&amp;oldid=prev"/>
		<updated>2024-01-03T15:32:56Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Enunț == Scrat și Scratte sunt două veverițe devoratoare de ghinde. Ele trăiesc într-un stejar înalt și culeg ghinde din cele N ramuri ale acestuia. Veverițele vor organiza un concurs: cine culege cele mai multe ghinde în K ture. Într-o tură,  fiecare veveriță se va deplasa de la vizuină până la o ramură a stejarului, de unde va culege cât mai multe ghinde, dar  nu mai mult de M ghinde, după care va reveni în vizuină. Veverițele vor efectua alternati...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunț ==&lt;br /&gt;
Scrat și Scratte sunt două veverițe devoratoare de ghinde. Ele trăiesc într-un stejar înalt și culeg ghinde din cele N ramuri ale acestuia. Veverițele vor organiza un concurs: cine culege cele mai multe ghinde în K ture. Într-o tură,&lt;br /&gt;
&lt;br /&gt;
fiecare veveriță se va deplasa de la vizuină până la o ramură a stejarului, de unde va culege cât mai multe ghinde, dar&lt;br /&gt;
&lt;br /&gt;
nu mai mult de M ghinde, după care va reveni în vizuină. Veverițele vor efectua alternativ fiecare câte K ture, prima&lt;br /&gt;
&lt;br /&gt;
care începe fiind Scratte.&lt;br /&gt;
&lt;br /&gt;
Supărat că la concurs nu va începe primul, Scrat decide să se antreneze separat și să vadă câte ghinde ar culege în K&lt;br /&gt;
&lt;br /&gt;
ture, dacă ar fi singur&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Să se realizeze un program care determină:&lt;br /&gt;
&lt;br /&gt;
Câte ghinde culege Scrat în timpul antrenamentului;&lt;br /&gt;
&lt;br /&gt;
Câte ghinde a cules fiecare veveriță pe durata concursului.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare Pe prima linie a fișierului ghindein.txt conţine pe prima linie un număr natural C. Pentru toate testele, C poate lua numai valorile 1 sau 2. Pe a doua linie se găsesc numerele N, M și K reprezentând numărul de&lt;br /&gt;
&lt;br /&gt;
ramuri ale stejarului, numărul maxim de ghinde culese la o tură, respectiv numărul de ture. Pe următoarele N&lt;br /&gt;
&lt;br /&gt;
linii se găsesc numărul de ghinde de pe fiecare ramură în parte.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Dacă valoarea lui C este 1, se va rezolva numai punctul 1) din cerințe. În acest caz, fişierul de ieşire ghindeout.txt va conține numărul total de ghinde cules în timpul antrenamentului de Scrat.&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui C este 2, se va rezolva numai punctul 2) din cerințe. În acest caz, fişierul de ieşire ghindeout.txt va conține pe aceeași linie două numere naturale, separate printr-un spațiu, reprezentând în ordine, numărul de ghinde culese de Scratte respectiv Scrat, pe durata concursului.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ N ≤ 500 000&lt;br /&gt;
* 1 ≤ K ≤ 2 000 000 000&lt;br /&gt;
* 1 ≤ M ≤ 500 000&lt;br /&gt;
* 0 ≤ numărul de ghinde de pe o ramură ≤ 500 000&lt;br /&gt;
* Pentru rezolvarea corectă a primei cerințe se obțin 20 de puncte, iar pentru rezolvarea corectă a celei de a&lt;br /&gt;
&lt;br /&gt;
doua cerințe se obțin 80 puncte&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ghindein.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
3 10 3&lt;br /&gt;
&lt;br /&gt;
13&lt;br /&gt;
&lt;br /&gt;
19&lt;br /&gt;
&lt;br /&gt;
4&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ghindeout.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
29&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Scart culege 10 ghinde de pe prima ramura, apoi 10 de pe a doua ramura și alte 9 de pe a doua ramura, adică&lt;br /&gt;
&lt;br /&gt;
10+10+9 = 29&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ghindein.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
pre.2&lt;br /&gt;
&lt;br /&gt;
4 10 3&lt;br /&gt;
&lt;br /&gt;
13&lt;br /&gt;
&lt;br /&gt;
19&lt;br /&gt;
&lt;br /&gt;
4&lt;br /&gt;
&lt;br /&gt;
7&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ghindeout.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
23 20&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Scratte: 10 de pe ramura a doua;&lt;br /&gt;
&lt;br /&gt;
Scrat: 10 de pe ramura unu;&lt;br /&gt;
&lt;br /&gt;
Scratte: 9 de pe ramura doi;&lt;br /&gt;
&lt;br /&gt;
Scrat: 7 de pe ramura patru;&lt;br /&gt;
&lt;br /&gt;
Scratte: 4 de pe ramura trei;&lt;br /&gt;
&lt;br /&gt;
Scrat: 3 de pe ramura unu;&lt;br /&gt;
&lt;br /&gt;
Scratte: 10+9+4=23&lt;br /&gt;
&lt;br /&gt;
Scrat: 10+7+3=20&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 este_valoare_valida(C, N, M, K):&lt;br /&gt;
    if not (1 &amp;lt;= N &amp;lt;= 500000 and 1 &amp;lt;= K &amp;lt;= 2000000000 and 1 &amp;lt;= M &amp;lt;= 500000):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def rezolva(C, N, M, K, a):&lt;br /&gt;
    rez = nr = rez1 = rez2 = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        x = int(f.readline())&lt;br /&gt;
        nr += x // M&lt;br /&gt;
        a[x % M] += 1&lt;br /&gt;
&lt;br /&gt;
    if C == 1:&lt;br /&gt;
        if nr &amp;gt;= K:&lt;br /&gt;
            return 1 * K * M,&lt;br /&gt;
&lt;br /&gt;
        K -= nr&lt;br /&gt;
        rez = 1 * nr * M&lt;br /&gt;
&lt;br /&gt;
        j = M - 1&lt;br /&gt;
        while j and K:&lt;br /&gt;
            if a[j]:&lt;br /&gt;
                rez += j&lt;br /&gt;
                K -= 1&lt;br /&gt;
                a[j] -= 1&lt;br /&gt;
            else:&lt;br /&gt;
                j -= 1&lt;br /&gt;
&lt;br /&gt;
        return rez,&lt;br /&gt;
&lt;br /&gt;
    if nr &amp;gt;= 2 * K:&lt;br /&gt;
        return 1 * K * M, 1 * K * M&lt;br /&gt;
&lt;br /&gt;
    rez1 = (nr + 1) // 2 * M&lt;br /&gt;
    rez2 = nr // 2 * M&lt;br /&gt;
    K = 2 * K - nr&lt;br /&gt;
&lt;br /&gt;
    j = M - 1&lt;br /&gt;
    while j &amp;gt; 0 and K:&lt;br /&gt;
        if K % 2 == 0:&lt;br /&gt;
            if a[j]:&lt;br /&gt;
                rez1 += j&lt;br /&gt;
                a[j] -= 1&lt;br /&gt;
                K -= 1&lt;br /&gt;
            else:&lt;br /&gt;
                j -= 1&lt;br /&gt;
        else:&lt;br /&gt;
            if a[j]:&lt;br /&gt;
                rez2 += j&lt;br /&gt;
                a[j] -= 1&lt;br /&gt;
                K -= 1&lt;br /&gt;
            else:&lt;br /&gt;
                j -= 1&lt;br /&gt;
&lt;br /&gt;
    return rez1, rez2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    Nmax = 500005&lt;br /&gt;
    Mmax = 500005&lt;br /&gt;
&lt;br /&gt;
    a = [0] * Mmax&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;ghindein.txt&amp;quot;, &amp;quot;r&amp;quot;) as f, open(&amp;quot;ghindeout.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
        linie = f.readline().split()&lt;br /&gt;
&lt;br /&gt;
        if len(linie) != 4:&lt;br /&gt;
            print(&amp;quot;Format invalid în &amp;#039;ghindein.txt&amp;#039;&amp;quot;)&lt;br /&gt;
            exit(1)&lt;br /&gt;
&lt;br /&gt;
        C, N, M, K = map(int, linie)&lt;br /&gt;
&lt;br /&gt;
        if not este_valoare_valida(C, N, M, K):&lt;br /&gt;
            print(&amp;quot;Valori invalide în &amp;#039;ghindein.txt&amp;#039;&amp;quot;)&lt;br /&gt;
            exit(1)&lt;br /&gt;
&lt;br /&gt;
        rezultat = rezolva(C, N, M, K, a)&lt;br /&gt;
        g.write(&amp;quot; &amp;quot;.join(map(str, rezultat)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
</feed>