大佬们好,这是ac代码 区别是一个是输入时判断最大值,ac了 输入后排序h[n - 1]最大值wa了 求大佬解答为啥
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
typedef long long LL;
LL h[N];
LL n, m;
bool check(int x) {
LL s = 0;
for (int i = 0; i < n; i++)
if (h[i] > x) s += h[i] - x;
return s >= m;
}
int main() {
scanf("%lld%lld", &n, &m);
LL maxx = -1;
for (LL i = 0; i < n; i++) {
scanf("%lld", &h[i]);
maxx = max(maxx, h[i]);
}
LL l = 0, r = maxx;
while (l < r) {
LL mid = l + r >> 1;
if (check(mid)) l = mid + 1;
else r = mid;
}
printf("%lld\n", l - 1);
return 0;
}
错误代码如下,60分
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
typedef long long LL;
LL h[N];
LL n, m;
bool check(int x) {
LL s = 0;
for (int i = 0; i < n; i++)
if (h[i] > x) s += h[i] - x;
return s >= m;
}
int main() {
scanf("%lld%lld", &n, &m);
for (LL i = 0; i < n; i++) {
scanf("%lld", &h[i]);
}
sort(h, h + n - 1);
LL l = 0, r = h[n - 1];
while (l < r) {
LL mid = l + r >> 1;
if (check(mid)) l = mid + 1;
else r = mid;
}
printf("%lld\n", l - 1);
return 0;
}