fbpx

Problema #134 – SecvK – Rezolvari PBInfo

de Mihai-Alexandru

Se dă un șir cu n numere naturale și un număr k.

Cerinţa

Să se determine o secvență de elemente de lungime k cu suma elementelor maximă.

Date de intrare

Fişierul de intrare secvk.in conţine pe prima linie numerele n și k, iar pe a doua linie n numere naturale separate prin spaţii.

Date de ieşire

Fişierul de ieşire secvk.out va conţine pe prima linie k numere, reprezentând elementele secvenței cerute.

Restricţii şi precizări

  • 1 ≤ k ≤ n ≤ 100000
  • numerele de pe a doua linie a fişierului de intrare vor fi mai mici decât 1000
  • dacă există mai multe secvențe de lungime k cu suma maximă se va afișa prima

Exemplu

secvk.in

8 3
5 6 1 2 6 6 4  3

secvk.out

6 6 4

Explicație

Sumele care se pot obține sunt: 12 9 9 14 16 13. Suma maximă este 16 și se obține pentru secvența 6 6 4

#include <bits/stdc++.h>


using namespace std;

ifstream fin("secvk.in");
ofstream fout("secvk.out");

int n , a[100001] , k;
int main()
{
    fin >> n >> k;
    for(int i = 1 ; i <= n ; ++i)
        fin >> a[i];
    int smax=0, dr = 0 , s=0;
    for(int i = 1 ; i < k ; ++i)
        s+=a[i];
    for(int i = k ; i <= n ; ++i)
    {
        s+=a[i];
        s-=a[i-k];
        if(s>smax)
        {
            smax=s;
            dr=i;
        }
    }
    for(int i = dr - k + 1 ; i <= dr ; ++i)
        fout << a[i] << ' ';
    
    fin.close();
    fout.close();
    
    return 0;
}
Comentarii

S-ar putea sa iti placa