#include #include using namespace std; typedef long long int ll; ll evaluate(const vector&h, ll hitsPerSec, ll damagePerHit){ ll res=0; for (ll hi:h){ ll hitsNeeded = (hi + damagePerHit - 1) / damagePerHit; res += hitsNeeded; } return res; } #define INF 1234567890987654321LL int main() { ll n, sum; cin >> n >> sum; vector h(n); for (int i=0; i> h[i]; } ll bestval = INF; ll bestHitsPerSec, bestDamagePerHit; for (ll hitsPerSec = 1; hitsPerSec<=sum-1; hitsPerSec+=int(sqrt(sum)/2)){ ll damagePerHit = sum - hitsPerSec; ll value = evaluate(h, hitsPerSec, damagePerHit); if (bestval == INF || bestHitsPerSec * value < bestval * hitsPerSec) { bestDamagePerHit = damagePerHit; bestHitsPerSec = hitsPerSec; bestval = value; } } bestval = INF; ll bestHitsPerSec2, bestDamagePerHit2; for (ll hitsPerSec = max(bestHitsPerSec - 2*int(sqrt(sum)) - 500, 1LL); hitsPerSec<=min(sum-1, bestHitsPerSec+2*int(sqrt(sum))+500); hitsPerSec++){ ll damagePerHit = sum - hitsPerSec; ll value = evaluate(h, hitsPerSec, damagePerHit); if (bestval == INF || bestHitsPerSec2 * value < bestval * hitsPerSec) { bestDamagePerHit2 = damagePerHit; bestHitsPerSec2 = hitsPerSec; bestval = value; } } for (auto hitsPerSec: vector{1, 2, sum-1, sum-2, int(sqrt(sum)), int(sqrt(sum))+1}){ ll damagePerHit = sum - hitsPerSec; ll value = evaluate(h, hitsPerSec, damagePerHit); if (bestval == INF || bestHitsPerSec2 * value < bestval * hitsPerSec) { bestDamagePerHit2 = damagePerHit; bestHitsPerSec2 = hitsPerSec; bestval = value; } } cout << bestDamagePerHit2 << ' ' << bestHitsPerSec2 << '\n'; return 0; }