View Code of Problem 3699

#include <stdio.h>

int abs(int x) {
	if (x < 0) {
		return -x;
	}
	return x;
}

int main() {
	int l, n;
	while (scanf("%d %d", &l, &n) != EOF) {
		int k[2001] = { 0 };
		int f[2001] = { 0 };
		int damage[2001] = { 0 };
		for (int i = 0;i < n;i++) {
			scanf("%d", &k[i]);
		}
		for (int i = 0;i < n;i++) {
			scanf("%d", &f[k[i]]);
		}
		for (int i = 0;i <= l;i++) {
			if (f[i] != 0) {
				int start = i - f[i];
				int end = i + f[i];
				if (start < 0) {
					start = 0;
				}
				if (end > l) {
					end = l;
				}
				for (int j = start;j <= end;j++) {
					damage[j] += f[i] - abs(i - j);
				}
			}
		}
		int min=damage[0];
		int index=0;
		for (int i = 0;i <= l;i++) {
			if (damage[i] < min) {
				min = damage[i];
				index = i;
			}
		}
		printf("%d\n%d\n", index, min);
	}
}

Double click to view unformatted code.


Back to problem 3699