#include #include #include int comp(void *x, void *y) { return *(int *)x - *(int *)y; } int main(void) { int *shop, *range; int d, n, m; int sum = 0, cent; int i, j, a, hoge; scanf("%d%d%d", &d, &n, &m); shop = (int *)malloc(sizeof(int) * n); memset(shop, 0, sizeof(int) * n); range = (int *)malloc(sizeof(int) * n * 2); memset(range, 0, sizeof(int) * n * 2); shop[0] = 0; //本店 for(i = 1; i < n; i++) { scanf("%d", &shop[i]); } qsort(shop, n, sizeof(shop[0]), comp); for(i = 0; i < n; i++) { printf("店舗[%d]の位置 = [%d]\n", i, shop[i]); } for(i = 1; i < n; i++) { cent = (shop[i] + shop[i - 1]) / 2; range[(i - 1) * 2 + 1] = cent; range[i * 2] = cent + 1; } cent = (d + shop[n - 1]) / 2; range[(n - 1) * 2 + 1] = cent; range[0] = cent + 1; for(i = 0; i < n; i++) { printf("店舗[%d]の配達範囲: [%d]〜[%d]間\n", i, range[i * 2], range[i * 2 + 1]); } for(i = 0; i < m; i++) { scanf("%d", &a); for(j = 1; j < n; j++) { if((range[j * 2] <= a) && (a <= range[j * 2 + 1])) { printf("配達先[%d]は店舗[%d]から配達します(配達距離[%d])\n", a, j, abs(a - shop[j])); sum += abs(a - shop[j]); break; } } if((range[0] <= a) && (a < d) || (0 < a) && (a <= range[1])) { if((range[(n - 1) * 2 + 1] < a) && (a < d)) { sum += d - a; hoge = d - a; } else { sum += a; hoge = a; } printf("配達先[%d]は店舗[0]から配達します(配達距離[%d])\n", a, hoge); } } printf("%d\n", sum); free(shop); free(range); return 0; }