#include #include #include char tmp[100]; char *readRow(FILE *f){ int i,j; j = 0; for(i = 0; i < 99; ++i) tmp[i] = 0; while((i = fgetc(f)) != '\n') tmp[j++] = i; return tmp; } int *readEntry(FILE *f){ int i,j; j = 0; for(i = 0; i < 99; ++i) tmp[i] = 0; while(((i = fgetc(f)) != '\n') && i != ' ') tmp[j++] = i; return atoi(tmp); } int readInt(FILE *f){ return atoi(readRow(f)); } int min_abs(int a, int b){ if(b > 0) return 0; a = abs(a); b = abs(b); if(a < b) return a; else return b; } void calculateWork(int *w, int p){ int i,j,k,l; long long work = 0; for(i = 0; i < p; ++i) if(w[i] > 0){ l = 1; while(w[i]){ if((i-l) >= 0) j = min_abs(w[i], w[i-l]); else j = 0; if((i+l) <= p) k = min_abs(w[i], w[i+l]); else k = 0; w[i] = w[i] - j; w[i-l] += j; work += l * j; if((w[i] - k) < 0) k = w[i]; w[i] -= k; w[i+l] += k; work += l * k; ++l; } } printf("%lli\n", work); } int main(int argc, char **argv){ int *w; FILE *f; int p,i; p = 1; f = fopen("gergovia.in", "r"); while(p != 0){ p = readInt(f); w = (int*) malloc(sizeof(int) * p); for(i = 0; i < p; i++){ w[i] = readEntry(f); } if(p != 0) calculateWork(w,p); } return 0; }