首页 > 其他分享 >[2015年NOIP提高组] 跳石头

[2015年NOIP提高组] 跳石头

时间:2022-08-22 20:00:10浏览次数:66  
标签:right NOIP sum mid long 石头 2015 check left

运用二分策略

先写函数确定距离,然后看要搬的石头数满足题意吗。距离确定后,把间距小于确定距离的需要全部搬走。

然后向左或向右再找更小或大的距离

每次都检查是否能仅移走m块岩石使得所有跳跃距离均大于等于mid

最后输出

代码:

#include<bits/stdc++.h>
using namespace std;
long long L,N,M;
long long D[100005] = {0};
bool check(long x)
{
long long sum=0;
long long s=0;
for(long long i=1;i<=N+1;i++)
{
if(D[i]-s<x)
sum++;
else
{
s=D[i];
}
}
return sum<=M;
}
int main()
{
cin>>L>>N>>M;
for(int i=1;i<=N;i++)
{
cin>>D[i];
}
long long left=1;
long long right=L;
D[N+1]=L;
while(left+1<right)
{
long long mid=(left+1+right)>>1;
if (check(mid))
{
left = mid;
}
else
{
right = mid;
}
}
if(check(right))
{
left = right;
}
cout<<left<<endl;
return 0;
}

标签:right,NOIP,sum,mid,long,石头,2015,check,left
From: https://www.cnblogs.com/xdzxaoqian/p/16614059.html

相关文章

  • 跳石头
    先把跳跃距离二分,然后把这个值作为当前的解,然后用一个check函数判断当前解是否合法,如果合法,那么就去右边继续找,如果不合法,那么就去左边寻找。最主要的就是check函数,可以先......
  • [2015年NOIP提高组] 跳石头
    一年一度的“跳石头”比赛又要开始了!这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石。组委会已经选择好了两块岩石作为比赛起点和终点。在起点和终点之间,有......
  • 雅礼NOIP2018集训 day5 赛
    雅礼NOIP2018集训day5赛题面由于出题人思维枯竭所以想不出好玩的背景。有n个物品,第i个物品的价格是vi,有两个人,每个人都喜欢n个物品中的一些物品。要求选出正......
  • [NOIP2015 提高组] 跳石头
    题目链接:https://www.luogu.com.cn/problem/P2678试题解析:题目应用了二分答案的思想。二分答案的大致模板,每次都分成两个区间(所有情况下都是左闭右开,包括起始状态),答案过大......
  • 雅礼NOIP2018集训 day3 u
    雅礼NOIP2018集训day3u题面考虑一个\(n*n\)的矩阵\(A\),初始所有元素均为\(0\)。执行\(q\)次如下形式的操作:给定\(4\)个整数\(r,c,l,s\),对于每个满足\(x\in[r,r+l),y\in......
  • [2015年NOIP提高组] 跳石头
    首先将石头位置排个序,以便处理方便。从位置的小到大扫遍所有石头,用一个变量存储上一个跳到的点。第一个与这上一个点的距离大于等于x的石头即是下一个跳到的点。因为我们......
  • [2015年NOIP提高组] 跳石头
     [2015年NOIP提高组]跳石头思路:本题是最大化最小值问题,考虑二分答案解决。先写函数确定距离,然后看要搬的石头数满足题意吗。距离确定了,把间距小于确定距离的需要全部搬......
  • 1033 [NOIP2017]逛公园 记忆化搜索 比最短路长k的方案数 dp递推算方案数
     链接:https://ac.nowcoder.com/acm/contest/26077/1033来源:牛客网题目描述策策同学特别喜欢逛公园。公园可以看成一张N个点M条边构成的有......
  • 4. [2001年NOIP普及组] 最大公约数和最小公倍数问题
    题目链接(码学堂,数据弱)题目链接(洛谷,数据极强)摘要:1.P,Q是正整数(unsigned)2.要求P,Q以x0为最大公约数,以y0为最小公倍数.试求:满足条件的所有可能的两个正整数的个数. ......
  • [2015年NOIP普及组] 金币
    #include<iostream>intmain(){intstep=1;intcoin=1;intnow;std::cin>>now;intcount=0;intwalk=0;for(intday=1;day<=now;da......