Pagini recente » Cod sursa (job #195630) | Cod sursa (job #2669282) | Cod sursa (job #1873011) | Cod sursa (job #1493369) | Cod sursa (job #1456232)
#include <stdio.h>
#include <stdlib.h>
int main() {
FILE *f1 = fopen("secv2.in", "r");
FILE *f2 = fopen("secv2.out", "w");
int n, k;
fscanf(f1, "%d%d", &n, &k);
int *v = (int *) malloc ((n+1) * sizeof(int));
int i, j;
for(i = 1;i <= n;i++)
fscanf(f1, "%d", &v[i]);
int *din = (int *) malloc ((n+1) * sizeof(int));
int *ind_sf = (int *) malloc ((n+1) * sizeof(int));
din[n-k+1] = 0;
for(i = n-k+1;i <= n;i++)
din[n-k+1] += v[i];
ind_sf[n-k+1] = n;
int s_max = din[n-k+1], i_max = n-k+1;
int *s = (int *) calloc (n+1, sizeof(int));
for(i = 1;i <= k;i++)
s[1] += v[i];
for(i = 2;i <= n-k;i++) {
s[i] = s[i-1] - v[i-1] + v[i+k-1];
}
for(i = n-k;i >= 1;i--) {
// if(ind_sf[i+1] - i != k) {
// din[i] = v[i] + din[i+1];
// ind_sf[i] = ind_sf[i+1];
// if(s_max < din[i]) {
// s_max = din[i];
// i_max = i;
// }
// continue;
// }
// if(2*k >= ind_sf[i+1] - i) {
// s = v[i] + din[i+1];
// for(j = i+k;j <= ind_sf[i+1];j++)
// s -= v[j];
// }
// else {
// s = v[i];
// for(j = i+1;j < i+k;j++)
// s += v[j];
// }
if(s[i] > v[i] + din[i+1]) {
din[i] = s[i];
ind_sf[i] = i+k-1;
}
else {
din[i] = v[i] + din[i+1];
ind_sf[i] = ind_sf[i+1];
}
if(s_max < din[i]) {
s_max = din[i];
i_max = i;
}
}
fprintf(f2, "%d %d %d\n", i_max, ind_sf[i_max], s_max);
fclose(f1);
fclose(f2);
return 0;
}