P1873 玄学ac
  • 板块题目总版
  • 楼主Alkaido
  • 当前回复5
  • 已保存回复5
  • 发布时间2021/10/30 15:37
  • 上次更新2023/11/4 01:55:22
查看原帖
P1873 玄学ac
217073
Alkaido楼主2021/10/30 15:37

大佬们好,这是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;
}
2021/10/30 15:37
加载中...