Cod sursa(job #65941)

Utilizator infogodinfo god infogod Data 13 iunie 2007 21:45:32
Problema Euro Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <stdio.h>

#define filein "euro.in"

#define fileout "euro.out"

#define MAXN 34567

int t;

struct val {

int val, pos, back;

long long max;

} e[MAXN];

int ne;

void read_in(void)

{

int i, n, a[MAXN];

freopen(filein, "r", stdin);

scanf("%d%d", &n, &t);

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

scanf("%d", a + i);

for(i = 0; i < n - 1; i++) {

e[ne].val += a[i];

if(e[ne].val < 0)

e[ne++].pos = i + 1;

}

e[ne].val += a[n - 1];

e[ne++].pos = n;

}

int main()

{

int i, j, totsum, parsum, back;

long long max;

read_in();

totsum = e->val;

e->back = 0;

e->max = (long long) totsum * e->pos - t;

for(i = 1; i < ne; i++) {

totsum += e[i].val;

max = (long long) totsum * e[i].pos;

back = 0;

parsum = e[i].val;

for(j = i - 1; (j >= e[i - 1].back) && (i - j <= 200); j--) {

if((long long) parsum * e[i].pos + e[j].max > max) {

max = (long long) parsum * e[i].pos + e[j].max;

back = j;

}

parsum += e[j].val;

}

e[i].back = back;

e[i].max = max - t;

}

freopen(fileout,"w",stdout);

printf("%Ldn", e[ne - 1].max);

return(0);

}