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
Răspunsuri la întrebare
Răspuns de
5
#include <iostream>
#include <fstream>
using namespace std;
int main(){
int n,k,i,max=0,s,poz_max;
ifstream fis("secvk.in");
ofstream fos("secvk.out");
fis>>n>>k;
int secvk[n];
for(i=0;i<k;i++){
fis>>secvk[i];
}
if(s>max){
max=s;
poz_max=k-1;
}
for(i=k;i<n;i++){
fis>>secvk[i];
s=s-secvk[i-k]+secvk[i];
if(s>max){
max=s;
poz_max=i;
}
}
for(i=poz_max-k+1;i<=poz_max;i++){
fos<<secvk[i]<<" ";
}
return 0;
}
#include <fstream>
using namespace std;
int main(){
int n,k,i,max=0,s,poz_max;
ifstream fis("secvk.in");
ofstream fos("secvk.out");
fis>>n>>k;
int secvk[n];
for(i=0;i<k;i++){
fis>>secvk[i];
}
if(s>max){
max=s;
poz_max=k-1;
}
for(i=k;i<n;i++){
fis>>secvk[i];
s=s-secvk[i-k]+secvk[i];
if(s>max){
max=s;
poz_max=i;
}
}
for(i=poz_max-k+1;i<=poz_max;i++){
fos<<secvk[i]<<" ";
}
return 0;
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Geografie,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă