NOIP 跳石头

本文介绍了一种使用二分查找算法解决特定问题的方法,通过挑战快速编码能力,详细展示了如何在给定的数据集中找到最远距离,以满足特定条件。代码实现采用C++,并附有完整的逻辑解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不说了还是二分,挑战自己码代码的速度

每次二分最远的距离就可以了

最后不知道怎么要判断下r

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int a[100005],n,m;
 5 int check(int x){
 6     int nowstone=1;
 7     int dist=a[1];
 8     int stone=0;
 9     while(nowstone<=n){
10         while(dist<x){
11             nowstone++;
12             stone++;
13             if(stone>m)return 0;
14             dist+=a[nowstone]-a[nowstone-1];
15         }
16         dist=a[nowstone+1]-a[nowstone];
17         nowstone++;
18     }
19     return 1;
20 }
21 int main(){
22     int leng;
23     cin>>leng>>n>>m;
24     for(int i=1;i<=n;i++){
25         cin>>a[i];
26     }
27     a[n+1]=leng;
28     int l=0,r=leng;
29     int ans;
30     while(l<r){
31         int mid=l+r>>1;
32         if(check(mid))ans=mid,l=mid+1;
33         else r=mid-1;
34     }
35     if(check(r))ans=r;
36     cout<<ans;
37 }

代码能力勉强还能达到要求了

转载于:https://www.cnblogs.com/saionjisekai/p/9643511.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值