#include <stdio.h> #include <stdlib.h> #define MAX(a,b) ((a>b)?(a):(b)) #define MIN(a,b) ((a<b)?(a):(b)) #define MAXGROW 1000000000000LL static inline long long __min(long long a, long long b) { return a < b ? a : b; } #define MAXSIZE 500000 int speed[1 + MAXSIZE + 50]; int grass[1 + MAXSIZE + 50]; int main(int argc, char *argv[]) { int n; int m; /* ilość koszeń */ int i, j; scanf("%d %d", &n, &m); for (i = 1; i <= n; i++) { scanf("%d", &speed[i]); } for (i = 1; i <= m; i++) { long long tmp; long long lim; scanf("%lld %lld", &tmp, &lim); tmp = 0; for (j = 1; j <= n; j++) { grass[j] = __min(speed[j]+grass[j], MAXGROW); if (grass[j] > lim) { tmp += grass[j] - lim; grass[j] = lim; } } printf("%lld\n", tmp); } 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 | #include <stdio.h> #include <stdlib.h> #define MAX(a,b) ((a>b)?(a):(b)) #define MIN(a,b) ((a<b)?(a):(b)) #define MAXGROW 1000000000000LL static inline long long __min(long long a, long long b) { return a < b ? a : b; } #define MAXSIZE 500000 int speed[1 + MAXSIZE + 50]; int grass[1 + MAXSIZE + 50]; int main(int argc, char *argv[]) { int n; int m; /* ilość koszeń */ int i, j; scanf("%d %d", &n, &m); for (i = 1; i <= n; i++) { scanf("%d", &speed[i]); } for (i = 1; i <= m; i++) { long long tmp; long long lim; scanf("%lld %lld", &tmp, &lim); tmp = 0; for (j = 1; j <= n; j++) { grass[j] = __min(speed[j]+grass[j], MAXGROW); if (grass[j] > lim) { tmp += grass[j] - lim; grass[j] = lim; } } printf("%lld\n", tmp); } return 0; } |