#include #include using namespace std; #define DEB(x) cout << #x << " = " << x << endl; long long ponds[100001]; long long water[100001]; int main(void) { int n; long long f; while (cin >> n >> f) { for (int i = 0; i < n; i++) { cin >> ponds[i]; water[i] = f; } int mi = 0; for (int i = 0; i < n; i++) { if (ponds[i] > ponds[mi]) { mi = i; } } if (mi == n - 1) { long long int sum = accumulate(ponds, ponds + n, 0); double r = sum / ((double)n * f); cout << r << " " << r << endl; } else { long long int sum = accumulate(ponds, ponds + mi + 1, 0); //DEB(sum) int remCnt = 1; long long int remSum = ponds[n - 1]; for (int i = n - 2; i > 0; i--) { if (ponds[i] < ponds[n - 1]) { remSum += ponds[i]; remCnt++; } else break; } //DEB(remSum) double r = sum / ((double)(mi + 1) * f); double r2 = remSum / ((double)(remCnt) * f); cout << r2 << " " << r << endl; } /* int n2 = 0; long long int sum = 0; double best = 0; for (int i = 0; i < n - 1; i++) { if (ponds[i] < ponds[i + 1]) { sum += ponds[i]; n2++; } else { double newBest = sum / ((double)n2 * f); best = best > newBest ? best : newBest; } } double lastTime = sum / ((double)n2 * f); cout << lastTime << " " << best << endl;*/ /*int rem = n; long long int total = 0; double totalT = 0; bool last = false; double lastTime = 0; while (rem > 0) { for(int i = 0; i < n; i++) { if (ponds[i] > 0) { ponds[i] -= water[i]; if (ponds[i] <= 0) { rem--; if (rem == 0) { totalT = total + (ponds[i] + water[i]) / (double)water[i]; //cout << "totalT " << totalT << " v " << i << endl; } if (i == n - 1) { last = true; lastTime = total + (ponds[i] + water[i]) / (double)water[i]; //cout << "lastTime " << lastTime << " v " << i << endl; } if (i < n - 1) { ponds[i + 1] -= abs(ponds[i]); } } } else { if (i < n -1 ) { water[i + 1] += water[i]; water[i] = 0; } } //cout << "pond " << i << " obsahuje " << ponds[i] << " rychlost " << water[i] << endl; } if (rem > 0) { total += 1; } } cout << lastTime << " " << totalT << endl;*/ } return 0; }