#include #include #include int max (int a, int b) { if (a > b) return a; else return b; } int main(){ int f, v, i, j, count, n; double *time, time_max, tim, cap, maximum; int *capacity; while (1) { if (scanf("%i %i", &n, &f) != 2) break; capacity = malloc(sizeof(int)*n); time = malloc(sizeof(double)*n); for (i = 0; i < n; i++) scanf("%d", (capacity + i)); time[0] = (double) capacity[0] / f; for (i = 1; i < n; i++) { cap = 0; tim = time[i - 1]; count = 1; if (tim*f >= capacity[i]) { time[i] = (double) capacity[i] / f; continue; } time[i] = tim; cap = tim*f; maximum = time[i - 1]; for (j = i - 1; j >= 1; j--) { count++; maximum = max(maximum, time[j]); tim = max(0, time[j - 1] - maximum); if ((cap + tim*count*f) >= capacity[i]) { time[i] += (double) (capacity[i] - cap) / (count*f); continue; } time[i] += tim; cap += tim*count*f; } time[i] += (double) (capacity[i] - cap) / ((count + 1)*f); } time_max = time[0]; for (i = 0; i < n; i++) if (time[i] > time_max) time_max = time[i]; printf("%f %f\n", time[n - 1], time_max); } return 0; }