Pagini recente » Monitorul de evaluare | Cod sursa (job #2759995) | Cod sursa (job #923577) | Cod sursa (job #1254019) | Cod sursa (job #787092)
Cod sursa(job #787092)
//============================================================================
// Name : Coding.cpp
// Author :
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <stdio.h>
#include <algorithm>
using namespace std;
#define inputFile "secv2.in"
#define outputFile "secv2.out"
#define MAX 500005
FILE *fileread, *fout;
int n, k;
int pos, posEnd, maxNo;
char numbers[MAX*10];
int secv[MAX];
void readFile(){
int j=0, order;
fileread = fopen(inputFile, "r");
fscanf(fileread, "%d %d\n", &n, &k);
fgets(numbers, sizeof(numbers), fileread);
for(int i =0; i< n; i++){
secv[i]=0;
order = 0;
while(numbers[j]!='-' &&
(numbers[j]<'0' || numbers[j]> '9'))
j++;
if(numbers[j]=='-'){
order = 1;
j++;
}
while(numbers[j]>='0' && numbers[j]<='9'){
secv[i]=secv[i]*10+(numbers[j]-'0');
j++;
}
if(order)
secv[i] =-secv[i];
}
fclose(fileread);
}
void process(){
int i;
int sum = 0, best;
maxNo = 0;
// compute the sum of the first L elements
for(i=0; i<k; i++)
sum = sum + secv[i];
maxNo = best = sum ;
pos = 0;
posEnd = k;
int tmpEnd = k;
int tmpStart = 0;
for(i = k ; i< n ; i++){
sum = sum + secv[i] - secv[i-k];
if(sum < best + secv[i]){
tmpEnd ++;
best = best + secv[i];
}else{
tmpEnd = k;
tmpStart = i -k +1;
best = sum;
}
if (maxNo < best){
pos = tmpStart ;
posEnd = tmpEnd;
maxNo = best;
}
}
pos = pos +1;
}
void output(){
fout = fopen(outputFile, "w");
fprintf(fout, "%d %d %d", pos,
posEnd+pos-1,
maxNo);
fclose(fout);
}
int main() {
// read the file
readFile();
// compute the max secv
process();
// output results
output();
return 0;
}