#include #include using namespace std; typedef long long int ll; double evaluate(const vector&h, ll hitsPerSec, ll damagePerHit){ double res=0; for (ll hi:h){ ll hitsNeeded = (hi + damagePerHit - 1) / damagePerHit; res += hitsNeeded / double(hitsPerSec); } return res; } int main() { ll n, sum; cin >> n >> sum; vector h(n); for (int i=0; i> h[i]; } double bestval = 1e18; ll bestHitsPerSec, bestDamagePerHit; for (ll hitsPerSec = 1; hitsPerSec<=sum-1; hitsPerSec+=int(sqrt(sum)/2)){ ll damagePerHit = sum - hitsPerSec; double value = evaluate(h, hitsPerSec, damagePerHit); if (value < bestval) { bestDamagePerHit = damagePerHit; bestHitsPerSec = hitsPerSec; bestval = value; } } bestval = 1e18; ll bestHitsPerSec2, bestDamagePerHit2; for (ll hitsPerSec = max(bestHitsPerSec - int(sqrt(sum)) - 5, 1LL); hitsPerSec<=min(sum-1, bestHitsPerSec+int(sqrt(sum))+5); hitsPerSec++){ ll damagePerHit = sum - hitsPerSec; double value = evaluate(h, hitsPerSec, damagePerHit); if (value < bestval) { bestDamagePerHit2 = damagePerHit; bestHitsPerSec2 = hitsPerSec; bestval = value; } } cout << bestDamagePerHit2 << ' ' << bestHitsPerSec2 << '\n'; /*ll hitsPerSec = sum/2; ll damagePerHit = (sum+1)/2; double value = evaluate(h, hitsPerSec, damagePerHit); while (hitsPerSec > 1){ double newval = evaluate(h, hitsPerSec-1, damagePerHit+1); if (newval < value) { value=newval; hitsPerSec--; damagePerHit++; } else { break; } } ll hitsPerSec2 = (sum+1)/2; ll damagePerHit2 = (sum)/2; double value2 = evaluate(h, hitsPerSec2, damagePerHit2); while (damagePerHit2 > 1){ double newval = evaluate(h, hitsPerSec2-1, damagePerHit2+1); if (newval < value2) { value2=newval; hitsPerSec2--; damagePerHit2++; } else { break; } } if (value < value2){ cout << damagePerHit << ' ' << hitsPerSec << '\n'; } else { cout << damagePerHit2 << ' ' << hitsPerSec2 << '\n'; }*/ return 0; }