<?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=3406_-_As_Easy_As_ABC</id>
	<title>3406 - As Easy As ABC - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3406_-_As_Easy_As_ABC"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3406_-_As_Easy_As_ABC&amp;action=history"/>
	<updated>2026-06-17T02:49:01Z</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=3406_-_As_Easy_As_ABC&amp;diff=5911&amp;oldid=prev</id>
		<title>Adina Timiș: Pagină nouă: ﻿ ==Cerința== Fie N un număr întreg impar și un vector A cu N elemente. Pentru fiecare element &lt;math&gt;A_{i}&lt;/math&gt;, acesta se poate incrementa cu 1. Fiecare element sepoate incrementa cel mult odată. Mai mult, se pot realiza cel mult K incrementări. Scopul este de a maximiza medianul lui A. Medianul unui vector este definit ca fiind elementul din mijlocul vectorului după sortarea acestuia. De exemplu, medianul vectorului [5, 8, 2, 9, 1] este 5.  ==Date de intrare== Pr...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3406_-_As_Easy_As_ABC&amp;diff=5911&amp;oldid=prev"/>
		<updated>2023-05-05T19:02:46Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: ﻿ ==Cerința== Fie N un număr întreg impar și un vector A cu N elemente. Pentru fiecare element &amp;lt;math&amp;gt;A_{i}&amp;lt;/math&amp;gt;, acesta se poate incrementa cu 1. Fiecare element sepoate incrementa cel mult odată. Mai mult, se pot realiza cel mult K incrementări. Scopul este de a maximiza medianul lui A. Medianul unui vector este definit ca fiind elementul din mijlocul vectorului după sortarea acestuia. De exemplu, medianul vectorului [5, 8, 2, 9, 1] este 5.  ==Date de intrare== Pr...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;﻿&lt;br /&gt;
==Cerința==&lt;br /&gt;
Fie N un număr întreg impar și un vector A cu N elemente. Pentru fiecare element &amp;lt;math&amp;gt;A_{i}&amp;lt;/math&amp;gt;, acesta se poate incrementa cu 1. Fiecare element sepoate incrementa cel mult odată. Mai mult, se pot realiza cel mult K incrementări. Scopul este de a maximiza medianul lui A. Medianul unui vector este definit ca fiind elementul din mijlocul vectorului după sortarea acestuia. De exemplu, medianul vectorului [5, 8, 2, 9, 1] este 5. &lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Prima linie conține un număr impar N și un întreg K. Pe a doua linie se află N numere separate prin spații naturale, reprezentând elementele vectorului. &lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Programul va afișa pe ecran numărul ce reprezintă maximul posibil al medianului după aplicarea operațiilor de incrementare. &lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*1 ≤ k ≤ n ≤ 1000, N e impar;&lt;br /&gt;
*1 ≤ &amp;lt;math&amp;gt;A_{i}&amp;lt;/math&amp;gt; ≤ 1000;&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:9 3&lt;br /&gt;
:4 4 4 8 2 2 9 9 1&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:5&lt;br /&gt;
==Explicație==&lt;br /&gt;
:Se pot incrementa elementele de pe pozițiile 1, 2 și 3. Valoarea comună reprezintă medianul maxim care se poate obține.&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:0 0&lt;br /&gt;
:0 0&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#3406 - As Easy As ABC&lt;br /&gt;
def maximize_median(vector, k):&lt;br /&gt;
    n = len(vector)&lt;br /&gt;
    mid = n // 2&lt;br /&gt;
    median = vector[mid]&lt;br /&gt;
&lt;br /&gt;
# pentru a crește valoarea medianei, vom parcurge elementele din stânga acesteia&lt;br /&gt;
    for i in range(mid - 1, -1, -1):&lt;br /&gt;
        if k &amp;lt;= 0:&lt;br /&gt;
            break&lt;br /&gt;
# calculăm diferența dintre valoarea medianei și elementul curent i, din stânga ei&lt;br /&gt;
# această diferență trebuie să fie mai mică sau egală cu numărul de operații disponibile k&lt;br /&gt;
        diff = min(vector[mid] - vector[i], k // (mid - i))&lt;br /&gt;
        # creștem valoarea medianei cu diferența calculată&lt;br /&gt;
        median += diff&lt;br /&gt;
# scădem din numărul total de operații k, numărul de operații realizate, pentru a crește valoarea medianei&lt;br /&gt;
        k -= diff * (mid - i)&lt;br /&gt;
&lt;br /&gt;
# pentru a crește valoarea medianei, vom parcurge elementele din dreapta medianei&lt;br /&gt;
    for i in range(mid + 1, n):&lt;br /&gt;
        if k &amp;lt;= 0:&lt;br /&gt;
            break&lt;br /&gt;
  # calculăm diferența dintre elementul curent i din dreapta medianei și valoarea acesteia&lt;br /&gt;
  # diferența trebuie să fie mai mică sau egală cu numărul de operații disponibile k&lt;br /&gt;
        diff = min(vector[i] - vector[mid], k // (i - mid))&lt;br /&gt;
  # creștem valoarea medianei cu diferența calculată&lt;br /&gt;
        median += diff&lt;br /&gt;
# scădem din numărul total de operații k, numărul de operații realizate pentru a crește valoarea medianei&lt;br /&gt;
        k -= diff * (i - mid)&lt;br /&gt;
&lt;br /&gt;
    # returnăm valoarea maximă a medianei&lt;br /&gt;
    return median&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    # citim numărul n de elemente din vector și numărul k de operații care pot fi realizate&lt;br /&gt;
    # elementele vectorului sunt sub forma de listă de numere&lt;br /&gt;
    n, k = map(int, input().split())&lt;br /&gt;
    vector = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
    # verificăm restricțiile&lt;br /&gt;
    if n % 2 == 0 or n &amp;lt; 1 or n &amp;gt; 1000 or k &amp;lt; 1 or k &amp;gt; n or any(a &amp;lt; 1 or a &amp;gt; 1000 for a in vector):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        vector.sort()&lt;br /&gt;
        max_median = maximize_median(vector, k) &lt;br /&gt;
        # în caz contrar, apelăm funcția și afișăm valoarea maximă a medianei&lt;br /&gt;
        print(max_median)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Adina Timiș</name></author>
	</entry>
</feed>