Rezolvare completă PbInfo #3406 AsEasyAsABC

Cerința

Fie N un număr întreg impar și un vector A cu N elemente. Pentru fiecare element Ai, 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

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.

Date de ieșire

Programul va afișa pe ecran numărul ce reprezintă maximul posibil al medianului după aplicarea operațiilor de incrementare.

Restricții și precizări

  • 1 ≤ k ≤ n ≤ 1000, N e impar.
  • 1 ≤ Ai ≤ 1000.

Exemplu

Intrare

9 3
4 4 4 8 2 2 9 9 1

Ieșire

5

Explicație

Se pot incrementa elementele de pe pozițiile 1, 2 și 3. Valoarea comună reprezintă medianul maxim care se poate obține.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema AsEasyAsABC:

#include <bits/stdc++.h>
#define nmax 1005
using namespace std;
int n, k, a[nmax], mid, req;
int main()
{
    cin>>n>>k;
    assert(1 <= n && n <= 1000);
    assert(1 <= k && k <= 1000);
    for (int i=1;i<=n;++i){
        cin>>a[i];
        assert(1 <= a[i] && a[i] <= 1000);
    }
    sort(a+1,a+n+1);
    mid = a[n/2+1];
    int act = n/2+1;
    while (act <= n && a[act] == mid){
        ++req, ++act;
    }
    if (req > k){
        cout<<mid<<'\n';
    } else {
        cout<<mid+1<<'\n';
    }
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #3406 AsEasyAsABC

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3406 AsEasyAsABC de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!