#include <stdio.h> #include <stdlib.h> int main(void) { unsigned int n, m; unsigned int *a; unsigned long long int d, b, d_last, d_last_all, b_last; unsigned int i, j; unsigned long long int przyrost, przyrost_min, reszta, suma, *trawa; scanf("%u %u", &n, &m); unsigned int SIZE = n; a = calloc(SIZE, sizeof *a); trawa = calloc(SIZE, sizeof *trawa); przyrost = 0; przyrost_min = 1000000; for(i=0; i<n; i++) { scanf("%u", &a[i]); przyrost += a[i]; if( przyrost_min > a[i] ) przyrost_min = a[i]; } reszta = 0; d_last = 0; d_last_all = 0; b_last = 0; for(i = 0; i < m; i++) { scanf("%llu %llu", &d, &b); if( (d - d_last) * przyrost_min >= b ) { suma = (d - d_last) * przyrost + reszta - b * n; reszta = b * n; //printf("."); } else { suma = 0; reszta = 0; for(j = 0; j < n; j++) { trawa[j] += a[j] * (d_last - d_last_all); if(trawa[j] > b_last) { trawa[j] = b_last; } trawa[j] += a[j] * (d - d_last); if(trawa[j] > b) { suma += (trawa[j] - b); trawa[j] = b; reszta += b; } else { reszta += trawa[j]; } } d_last_all = d; //printf("_"); } d_last = d; b_last = b; printf("%llu\n", suma); } free(a); free(trawa); return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | #include <stdio.h> #include <stdlib.h> int main(void) { unsigned int n, m; unsigned int *a; unsigned long long int d, b, d_last, d_last_all, b_last; unsigned int i, j; unsigned long long int przyrost, przyrost_min, reszta, suma, *trawa; scanf("%u %u", &n, &m); unsigned int SIZE = n; a = calloc(SIZE, sizeof *a); trawa = calloc(SIZE, sizeof *trawa); przyrost = 0; przyrost_min = 1000000; for(i=0; i<n; i++) { scanf("%u", &a[i]); przyrost += a[i]; if( przyrost_min > a[i] ) przyrost_min = a[i]; } reszta = 0; d_last = 0; d_last_all = 0; b_last = 0; for(i = 0; i < m; i++) { scanf("%llu %llu", &d, &b); if( (d - d_last) * przyrost_min >= b ) { suma = (d - d_last) * przyrost + reszta - b * n; reszta = b * n; //printf("."); } else { suma = 0; reszta = 0; for(j = 0; j < n; j++) { trawa[j] += a[j] * (d_last - d_last_all); if(trawa[j] > b_last) { trawa[j] = b_last; } trawa[j] += a[j] * (d - d_last); if(trawa[j] > b) { suma += (trawa[j] - b); trawa[j] = b; reszta += b; } else { reszta += trawa[j]; } } d_last_all = d; //printf("_"); } d_last = d; b_last = b; printf("%llu\n", suma); } free(a); free(trawa); return 0; } |