1 条题解

  • 0
    @ 2025-12-16 20:50:54

    #include #include #include using namespace std;

    int N, C;

    bool canPlace(int d, vector& x) { int count = 1; // 第一头牛放在第一个隔间 int lastPos = x[0];

    for (int i = 1; i < N; i++) {
        if (x[i] - lastPos >= d) {
            count++;
            lastPos = x[i];
        }
        if (count >= C) return true;
    }
    return count >= C;
    

    }

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

    sort(x.begin(), x.end());
    
    int left = 0, right = x[N-1] - x[0];
    while (left < right) {
        int mid = left + (right - left + 1) / 2;
        if (canPlace(mid, x)) {
            left = mid;
        } else {
            right = mid - 1;
        }
    }
    
    cout << left << endl;
    
    return 0;
    

    }

    • 1

    信息

    ID
    14545
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    15
    已通过
    2
    上传者