#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)/8)){ 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)) - 1500, 1LL); hitsPerSec<=min(sum-1, bestHitsPerSec+2*int(sqrt(sum))+1500); 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}){ for (ll hitsPerSec=1;hitsPerSec<=1000 && hitsPerSec