P2678 跳石头
1.C++内存四区2.算法-排序-快速排序3.算法-排序-归并排序4.c++重载5.算法-二分6.算法—前缀和7.算法—差分8.算法-双指针9.c++引用10.c++函数默认参数及占位参数11.c++函数模板12.c++类和对象-封装13.struct和class的区别14.成员属性设置为私有15.C++类和对象-对象特性(1)16.C++类和对象-对象特性(2)17.N皇后18.动态规划dp-01背包问题19.C++类和对象-对象特性(4)20.C++类和对象-对象特性(3)21.C++友元22.C++运算符重载23.C++继承24.C++多态25.C++类模板26.C++vector容器27.C++string容器28.C++deque容器29.算法-树状数组30.算法线段树31.算法-bfs32.算法-贪心33.算法-Flood Fill34.数据结构-链表35.数据结构-栈36.数据结构-队列
37.P2678 跳石头
38.5132139.54440.3213241.牛客寒假算法集训1-总结42.牛客寒假算法集训2-总结43.牛客寒假算法集训3-总结44.数论-质数45.博弈论46.第十四届蓝桥杯省赛C++题解47.Trie树48.并查集49.数据结构-堆50.哈希表51.拓扑排序52.Dijkstra53.spfa54.数论-约数55.数论-欧拉函数56.图的存储和遍历57.牛客寒假算法集训4-总结58.牛客寒假算法集训5-总结59.牛客寒假算法集训6-总结60.Bellman_ford61.Floyd62.编辑距离63.数位dpP2678 跳石头
1.思路:
首先我们二分跳跃距离,然后把这个跳跃距离“认为”是最短的跳跃距离,然后去以这个距离为标准移石头。判断这个解是不是可行解。check函数去判断如果以这个距离为最短跳跃距离需要移走多少块石头,先不必考虑限制移走多少块,等全部拿完再把拿走的数量和限制进行比对,如果超出限制,那么这就是一个非法解,反之就是一个合法解
2.算法:
二分,贪心
3.时间复杂度:
o(nlogn)
4.AC代码:
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
const int N=5e4+10;
int a[N];
int n,m,k;
bool check(int x)//按照可以移走石头的数量划分二分区间
{
int cnt=0;int j=0;
for(int i=1;i<=m+1;i++)
{
if(a[i]-a[j]<x) cnt++;//统计移走的石头数量
else j=i;
}
if(cnt>k) return false;//如果数量大于k不符合条件 false
else return true;
}
int main()
{
cin>>n>>m>>k;
for(int i=1;i<=m;i++) cin>>a[i];
a[m+1]=n;
int l=1;//最短跳跃距离左边界:一个也不移动并且最近距离为1
int r=n;//最短跳跃距离右边界:移走所有石头
while(l<r)
{
int mid=l+r+1>>1;
if(check(mid)) l=mid;
else r=mid-1;
}
cout<<l<<endl;
return 0;
}
p3853 路标设置
1.思路:
与上题类似,只需要逆向考虑一下即可
#include <iostream>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int a[N];
int n,m,k;
bool check(int x)
{
ll sum=0;//需要增加路标的数量
for(int i=1;i<m;i++)
{
if(a[i+1]-a[i]>x)
{
//特殊判一下如果距离是x的倍数的话要减一
if((a[i+1]-a[i])%x==0) sum+=(a[i+1]-a[i])/x-1;
else sum+=(a[i+1]-a[i])/x;
}
}
if(sum>k) return false;
else return true;
}
int main()
{
cin>>n>>m>>k;
for(int i=1;i<=m;i++) cin>>a[i];
int l=1;int r=a[m]-a[1];
while(l<r)
{
ll mid=l+r>>1;
if(check(mid)) r=mid;
else l=mid+1;
}
cout<<l<<endl;
return 0;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析