二分答案:砍树
题目:P1873 [COCI 2011/2012 #5] EKO / 砍树 - 洛谷
题目步骤和上一道木材加工几乎一样。
#include <iostream>using namespace std;
typedef long long LL;
const int n = 1e6 + 10; LL N, M;
LL a[n];
LL mid;LL calc(LL len)
{LL ret = 0;for (int i = 1; i <= N; i++){if (a[i] < len) continue;else ret += a[i]-len; }return ret;
}int main()
{cin >> N >> M; //求伐木机锯片的最大整数高度H for (int i = 1; i <= N; i++) cin >> a[i];LL left = 1, right = 2e9 + 10;while(left < right){mid = (left+right+1)/2;if (calc(mid) >= M) left = mid;else right = mid-1;}if (calc(left) < M) cout << 0 << endl;else cout << left << endl; return 0;
}