#include #include double gettime(int index, int capacity[], int rate[]) { double this_t = 0, prev_t = 0; if (index == 0) { this_t = (double)capacity[index] / (double)rate[index]; } else { this_t = (double)capacity[index] / (double)rate[index]; prev_t = gettime(index - 1, capacity, rate); if (prev_t < this_t) { this_t = prev_t + ((double)capacity[index] - (double)rate[index] * prev_t) / (double)(rate[index] + rate[index - 1]); rate[index] += rate[index - 1]; } } return this_t; } void setRate(int rate[], int speed, int count) { int i; for (i = 0; i < count; i++) rate[i] = speed; } int main() { /* int count, rate; scanf("%d %d\n", &count, &rate); int **array = (int**)malloc(3 * sizeof(int*)); int i = 0; for (i = 0; i < count; i++) { array[i] = (int*)malloc(count * sizeof(int)); } */ int count, speed; while (scanf("%d %d\n", &count, &speed) > 1) { int *capacity = (int*)malloc(count * sizeof(int)); int *rate = (int*)malloc(count * sizeof(int)); int i; for (i = 0; i < count; i++) { scanf("%d", capacity + i); rate[i] = speed; } double t = gettime(count - 1, capacity, rate); printf("%g ", t); double t_max = 0; for (i = 0; i < count; i++) { setRate(rate, speed, count); t = gettime(i, capacity, rate); if (t > t_max) t_max = t; } printf("%g\n", t_max); } return 0; }