题目出错了吧
查看原帖
题目出错了吧
772815
一咕咕一楼主2024/6/16 20:42
#include <iostream>
#include <vector>

using namespace std;

bool check(int mid, const vector<int>& positions, int k) {
    int cnt = 0; // 新增的路标数量
    for (int i = 0; i < positions.size() - 1; ++i) {
        int distance = positions[i + 1] - positions[i];
        if (distance > mid) {
            // 如果间距超过mid,需要放置额外的路标
            cnt += (distance - 1) / mid;
        }
        if (cnt > k) return false;
    }
    return true;
}

int main() {
    int L, N, K;
    cin >> L >> N >> K;

    vector<int> positions(N);
    for (int i = 0; i < N; ++i) {
        cin >> positions[i];
    }

    int low = 1; // 间隙最少为1
    int high = L; // 最大值为L长度

    while (low < high) {
        int mid = (low + high) / 2;
        if (check(mid, positions, K)) {
            high = mid;
        } else {
            low = mid + 1;
        }
    }

    cout << low << endl;

    return 0;
}

这个虽然是AC代码,但是不符合常理

输入: 101 3 1

0 101 40

应该输出:

40

实际输出:

51

如果应该输出中算错了,总之不可能是51,可以画图理解。

2024/6/16 20:42
加载中...