Informatică, întrebare adresată de ratacurcanul, 8 ani în urmă

Fie un vector cu 2*n elemente numere naturale. Din vector sunt sterse pe rand elemente din k in k pozitii. Numararea pozitiilor se va face cu revenire la prima in cazul in care indicele curent este mai mare decat n.Operatia se repeta de n ori. Determinati pozitia de inceput a numaratorii astfel incat elementele ramase in vector sa aiba suma maxima. Se va afisa pozitia de inceput a numaratorii si suma elementelor ramase in vector. Exemplu pentru n=3 si k=3 si vectorul A=( 3,10,15,4,2,10) se va afisa 2 , Suma=35. s-au sters elementele de pe pozitiile 4,1,5.


CinevaFaraNume: Pe exemplul tau trebuie sa afiseze indicele 4 si suma 35.

Răspunsuri la întrebare

Răspuns de CinevaFaraNume
0

#include <iostream>

using namespace std;

int vec[10001];

bool sters[10001];

int mod(int a,int b){

return (a % b + b) % b;

}

int main(){

int n,k;

cin >> n >> k;

for(int i = 1; i <= 2*n; i++){

 cin >> vec[i];

}

int ind = 1;

int veclen = 2*n;

for(int i = 0; i < n; i++){

 sters[ind] = true;

 ind += k;

 if(ind > veclen) ind %= (veclen);

 while(sters[ind]){ind++;if(ind > veclen) ind %= veclen;}

}

int smax = 0, s, indmax = -1;

for(ind = 1; ind <= veclen; ind++){

 s = 0;

 for(int i = 1; i <= veclen; i++){

  if(!sters[mod(i - ind, veclen)+1]) s += vec[i];

 }

 if(s > smax){

  smax = s;

  indmax = ind;

 }

}

cout << indmax << ' ' << smax;

}

Alte întrebări interesante