Pagini recente » Cod sursa (job #2742041) | Cod sursa (job #2728445) | Cod sursa (job #1248403) | Cod sursa (job #1526288) | Cod sursa (job #1436833)
/// Bibliotecile care ne trebuiesc
#include <stdio.h> /// pentru fscanf() + fprintf() + printf()
#include <limits.h> /// pentru INT_MIN
#include <ctype.h> /// pentru isdigit()
/// Constantele care ne trebuiesc
#define Dragoste 4096
/// Variabilele care ne trebuiesc
int n; /// numarul de elemente
int i; /// un index
int b; /// inceputul subsecventei
int num; /// citim numar cu numar
int sum; /// suma la un moment dat
int bMax; /// inceputul subsecventei maxime
int eMax; /// sfarsitul subsecventei maxime
int maxSum; /// suma maxima
int pos = Dragoste; /// pozitia in buff[]
char c; /// un caracter
char sign; /// semnul numarului
char buff[Dragoste]; /// bufferul oferit de sistem
/// un fel de fgetc()
inline char getChar(FILE *f) {
if(pos == Dragoste) {
fread(buff, 1, Dragoste, f);
pos = 0;
}
return buff[pos++];
}
/// un fel de fscanf()
inline void scanFile(FILE *f, int *result) {
*result = 0;
c = '+';
do {
sign = c;
c = getChar(f);
} while (!isdigit(c));
do {
*result = (*result << 3) + (*result << 1) + c - '0';
c = getChar(f);
} while(isdigit(c));
if (sign == '-') {
*result = -*result;
}
}
/// int main()
int main() {
/// deschidere fisier de intrare
FILE *f = fopen("ssm.in", "r");
sum = -1;
maxSum = INT_MIN;
/// citim parsat datele de intrare
scanFile(f, &n);
for (i = 0; i < n; i++) {
scanFile(f, &num);
/// daca suma e negativa
if (sum < 0) {
sum = 0;
b = i;
}
/// recalculam suma + retinem suma maxima
sum += num;
if (sum > maxSum) {
maxSum = sum;
bMax = b;
eMax = i;
}
}
fclose(f);
/// afisam rezultatul + mereu linie noua
f = fopen("ssm.out", "w");
fprintf(f, "%d %d %d\n", maxSum, bMax + 1, eMax + 1);
fclose(f);
/// Multumim Doamne!
printf("Hristos a inviat!");
/// dai return 0
return 0;
}