求拍醒-有没有可能subtask1的用例输出是错的?
查看原帖
求拍醒-有没有可能subtask1的用例输出是错的?
767252
emma_ren楼主2023/10/26 11:31

以下用例

8 3 1
2
4
7

洛谷给的output是2; 但是我们看如果去掉石头2,那么剩下的石头里(0,4,7,8)中最短跳跃距离的最大值,也即相邻两块石头4和7之间的最大值是3;3是比output中给出的2还要大的; 以下是我90分的code,上述用例输出3

#include <iostream>
#include <algorithm>
using namespace std;

int l, n, m;
// int dis[100000];
int dis[10];

bool judge(int x){
    int cnt = 0, cur = 0; 
    int max_dis = l;
    for(int i=1; i<=n; i++){
        if(x > max_dis){
            continue;
        }
        //在剩下的n-m+2石头中, 找到两两之间距离>=x的石头数目
        if(dis[i] - dis[cur] >= x){
            cnt++;
            cur = i;
        }
    }
    //拿走m块石头转换为保留至少n-m块石头
    return cnt >= n-m;
}
int main(){
    cin >> l >> n >> m;
    for(int i = 1; i<=n; i++){
        cin >> dis[i];
    }
    dis[n+1] = l;

    int left = 0, r = l +1 , mid = 0;
    while(left + 1 !=r){
        mid = (left+r) /2;
        if(judge(mid)){
            left = mid;
        }else{
            r = mid;
        }
    }
    cout << left << endl;
    return 0;
}
2023/10/26 11:31
加载中...