<?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=2358_-_castig</id>
	<title>2358 - castig - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=2358_-_castig"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2358_-_castig&amp;action=history"/>
	<updated>2026-05-01T12:10:34Z</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=2358_-_castig&amp;diff=8837&amp;oldid=prev</id>
		<title>Andrada378: Pagină nouă: == Enunț == Ana şi Bogdan au participat la un concurs şi au obţinut premiul I, respectiv premiul al II-lea. La concurs există n premii, numerotate de la 1 la n, în ordinea în care sunt aşezate pe masă. Regulamentul concursului prevede că fiecare câştigător trebuie să aleagă exact k premii aşezate pe poziţii consecutive. Fiindcă Ana are premiul I, ea poate să îşi aleagă prima premiile. Apoi Bogdan va alege şi el k premii aşezate pe poziţii consecutive...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2358_-_castig&amp;diff=8837&amp;oldid=prev"/>
		<updated>2024-01-03T12:48:09Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Enunț == Ana şi Bogdan au participat la un concurs şi au obţinut premiul I, respectiv premiul al II-lea. La concurs există n premii, numerotate de la 1 la n, în ordinea în care sunt aşezate pe masă. Regulamentul concursului prevede că fiecare câştigător trebuie să aleagă exact k premii aşezate pe poziţii consecutive. Fiindcă Ana are premiul I, ea poate să îşi aleagă prima premiile. Apoi Bogdan va alege şi el k premii aşezate pe poziţii consecutive...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Enunț ==&lt;br /&gt;
Ana şi Bogdan au participat la un concurs şi au obţinut premiul I, respectiv premiul al II-lea. La concurs există n premii, numerotate de la 1 la n, în ordinea în care sunt aşezate pe masă. Regulamentul concursului prevede că fiecare câştigător trebuie să aleagă exact k premii aşezate pe poziţii consecutive. Fiindcă Ana are premiul I, ea poate să îşi aleagă prima premiile. Apoi Bogdan va alege şi el k premii aşezate pe poziţii consecutive dintre cele rămase după ce a ales Ana. Ana este foarte supărată pe Bogdan, aşa că ea urmăreşte ca Bogdan să câştige cât mai puţin, fără să o intereseze prea mult ce premii alege ea.&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Scrieţi un program care, cunoscând n, k şi valorile celor n premii, determină cel mai mic număr valmin, astfel încât Bogdan să nu poate selecta k premii aşezate pe poziţii consecutive cu o valoare totală mai mare decât valmin.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare castigin.txt conţine pe prima linie două numere naturale n k, reprezentând numărul total de premii şi respectiv numărul de premii consecutive pe care câştigătorii trebuie să le aleagă. Pe a doua linie se află n numere naturale v[1], v[2], …, v[n] reprezentând, în ordinea aşezării pe masă, valorile celor n premii.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire castigout.txt va conţine o singură linie pe care va fi scris numărul natural valmin, determinat conform cerinţei.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 3 ≤ n ≤ 100 000&lt;br /&gt;
* 1 ≤ k ≤ n/3&lt;br /&gt;
* 1 ≤ v[i] ≤ 1 000 000 000, pentru 1 ≤ i ≤ n&lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;castigin.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
10 3&lt;br /&gt;
&lt;br /&gt;
2 5 7 3 1 22 7 2 9 1&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;castigout.txt&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
15&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Dacă Ana alege premiile cu valorile 1 22 7, secvenţa cea mai convenabilă pentru Bogdan este 5 7 3 (deci valmin este 15). Există şi alte alegeri bune pentru Ana (22 7 2), dar valmin rămâne acelaşi.&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_input_valid(n, k, v):&lt;br /&gt;
    if not (3 &amp;lt;= n &amp;lt;= 100000):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if not (1 &amp;lt;= k &amp;lt;= n // 3):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        if not (1 &amp;lt;= v[i] &amp;lt;= 1000000000):&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def gaseste_valoarea_minima():&lt;br /&gt;
    nmax = 100002&lt;br /&gt;
&lt;br /&gt;
    fin = open(&amp;quot;castigin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    fout = open(&amp;quot;castigout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    n, k = map(int, fin.readline().split())&lt;br /&gt;
    v = list(map(int, fin.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    if not este_input_valid(n, k, v):&lt;br /&gt;
        print(&amp;quot;Input invalid. Verificați condițiile.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    s = [0] * nmax&lt;br /&gt;
    smax = [0] * nmax&lt;br /&gt;
    dmax = [0] * nmax&lt;br /&gt;
&lt;br /&gt;
    suma_val = sum(v[:k])&lt;br /&gt;
    s[0] = smax[0] = suma_val&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, n - k + 1):&lt;br /&gt;
        s[i] = s[i - 1] - v[i - 1] + v[i + k - 1]&lt;br /&gt;
        smax[i] = smax[i - 1] if s[i] &amp;lt;= smax[i - 1] else s[i]&lt;br /&gt;
&lt;br /&gt;
    dmax[n - k] = s[n - k]&lt;br /&gt;
&lt;br /&gt;
    for i in range(n - k - 1, 0, -1):&lt;br /&gt;
        dmax[i] = dmax[i + 1] if s[i] &amp;lt;= dmax[i + 1] else s[i]&lt;br /&gt;
&lt;br /&gt;
    valmin = dmax[k + 1]&lt;br /&gt;
&lt;br /&gt;
    for i in range(2, k + 1):&lt;br /&gt;
        if valmin &amp;gt; dmax[i + k]:&lt;br /&gt;
            valmin = dmax[i + k]&lt;br /&gt;
&lt;br /&gt;
    for i in range(k + 1, n - k + 1):&lt;br /&gt;
        maxim = smax[i - k] if smax[i - k] &amp;gt; dmax[i + k] else dmax[i + k]&lt;br /&gt;
        if maxim &amp;lt; valmin:&lt;br /&gt;
            valmin = maxim&lt;br /&gt;
&lt;br /&gt;
    fout.write(str(valmin) + &amp;#039;\n&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    fin.close()&lt;br /&gt;
    fout.close()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    gaseste_valoarea_minima()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
</feed>