Luogu3403跳楼机
https://zybuluo.com/ysner/note/1099616
题面
给你三个数\(x\),\(y\),\(z\),问你能够凑出多少个[1,\(h\)]之间的数。
解析
处理出\(y\),\(z\)能凑出的高度
然后这些高度凑一些\(x\)就可以得到其它的高度
那么可以把这些\(y\),\(z\)凑出的高度对\(x\)取模,其它的用\(x\)来填补
所以设\(dp[i]\)表示\(y\),\(z\)凑出高度%\(x\)为\(i\)需要的最低高度
那么答案就是\[ans=\sum_{i=0}^{x-1}(\frac{h-dp[i]}{x}+1)\]
代码
#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<queue>
#define ll long long
#define re register
#define il inline
#define fp(i,a,b) for(re int i=a;i<=b;i++)
#define fq(i,a,b) for(re int i=a;i>=b;i--)
using namespace std;
const int N=5e5;
int h[N],cnt,X,Y,Z;ll dp[N];
bool vis[N];
ll ans,H;
struct Edge{int to,next,w;}e[N<<1];
struct node
{ll dis;int u;bool operator < (const node &o) const {return dis>o.dis;}
};
priority_queue<node>Q;
il void add(re int u,re int v,re int w){e[++cnt]=(Edge){v,h[u],w};h[u]=cnt;}
il ll gi()
{re ll x=0,t=1;re char ch=getchar();while((ch<'0'||ch>'9')&&ch!='-') ch=getchar();if(ch=='-') t=-1,ch=getchar();while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();return x*t;
}
il void Dijstra()
{memset(dp,127,sizeof(dp));dp[1%X]=1;Q.push((node){1,1%X});while(!Q.empty()){re int u=Q.top().u;Q.pop();if(vis[u]) continue;vis[u]=1;for(re int i=h[u];i+1;i=e[i].next){re int v=e[i].to;if(dp[v]>dp[u]+e[i].w){dp[v]=dp[u]+e[i].w;Q.push((node){dp[v],v});}}}
}
int main()
{memset(h,-1,sizeof(h));H=gi();X=gi();Y=gi();Z=gi();if(Y<X) swap(Y,X);if(Z<X) swap(Z,X);fp(i,0,X-1) add(i,(i+Y)%X,Y),add(i,(i+Z)%X,Z);Dijstra();fp(i,0,X-1) if(dp[i]<=H) ans+=((H-dp[i])/X+1);printf("%lld\n",ans);return 0;
}
转载于:https://www.cnblogs.com/yanshannan/p/8716953.html
Luogu3403跳楼机相关推荐
- 同余最短路(P3403 跳楼机)
同余最短路 前置 给定m个数,这m个数可以重复取,问最大的这m个数不能拼成的数,或者给定一定范围,范围里有多少个数是这m个数可以拼成的,对于这种问题我们可以考虑同余最短路的算法. P3403 跳楼机 ...
- 【洛谷3043】跳楼机(最短路)
[洛谷3043]跳楼机(最短路) 题面 洛谷 题解 思路很妙嗷. 先只考虑只用\(y,z\)两种移动方式,它们一定能够到达一些楼层, 那么这些楼层再只用\(x\)拓展就能够计算答案. 那么我们这样子计 ...
- 【洛谷 P3403】跳楼机(SPFA)
P3403 跳楼机 题目背景 DJL为了避免成为一只咸鱼,来找srwudi学习压代码的技巧. 题目描述 Srwudi的家是一幢h层的摩天大楼.由于前来学习的蒟蒻越来越多,srwudi改造了一个跳楼机, ...
- 【JZOJ A组】跳楼机
Description DJL为了避免成为一只咸鱼,来找srwudi学习压代码的技巧. Srwudi的家是一幢h层的摩天大楼.由于前来学习的蒟蒻越来越多,srwudi改造了一个跳楼机,使得访客可以更方 ...
- 机器人无限火力无限e符文_无限火力装备符文评级 召唤师峡谷秒变欢乐谷 机器人化身跳楼机...
无限火力模式激情上线,拥有80%超快冷却缩减的BUFF,一切都和召唤师峡谷不同.那么在无限火力模式中,哪些装备符文能拥有更为亮眼的表现呢? 装备篇 无限火力最爽的一点就是--装备也能够享受80%的冷却 ...
- JZOJ #4722 跳楼机 (最短路模型的完美转化)
题目描述: 给出$h,x,y,z$,求在$h$以内,$x,y,z$可以凑出多少个不同的数.$(1\leq{h}\leq{10^{18}},1\leq{x,y,z}\leq{10^5})$ 解题思路: ...
- P3403 跳楼机 同余最短路
传送门 题意: 思路: 转换一下题目就是用若干x,y,zx,y,zx,y,z能凑出来多少个<=h<=h<=h的数.先考虑两个数y,zy,zy,z的情况,我们如果能求出来这两个数能凑出 ...
- JZOJ4722 跳楼机 巧妙地转换为最短路模型
题目大意 有一个 H H高的楼房,现在给你三个正整数x,y,zx,y,z表示,在每一层 i i,你有4种选择,到i+xi+x, i+y i+y, i+z i+z层或第 1 1层.问能到多少个楼层. H ...
- 最短路模型-跳楼机-洛谷P3403
第一次遇到这种数学题转化为图论的题目,与我一开始的想法相同,将其中一个变量与另外两个变量分离开来,便于处理.由于以前一直认为SPFA会被卡,所以使用了堆优化的Dijkstra,结果超时了,为什么呢?因 ...
- 【算法笔记】一步一步推出来的同余最短路优化思路(千字长文,超详细)
整理的算法模板合集: ACM模板 目录 同余最短路 例题1:luogu P3403 跳楼机 例题2:luogu P2371 [国家集训队]墨墨的等式 例题3:luogu P2662 牛场围栏 同余最短 ...
最新文章
- win7下解决Android SDK Manger慢
- 视频目标检测跟踪--Detect to Track and Track to Detect
- 硕导跳槽高中当老师,博士扎堆中小学,是内卷还是进步?
- 修改注册表真正的提高网速
- Linux查看CPU,内存,GPU,进程,版本,系统内核信息
- 7 centos 源码安装samba_Centos-7安装zabbix
- java web 嵌套播放器_请教一下tableau如何嵌套进自己开发的javaweb 项目中,谢谢了...
- Transformer模型总结
- KNN算法的简单实现
- GO语言-基础语法:条件判断
- positional encoding位置编码详解:绝对位置与相对位置编码对比
- JavaScript函数作用域
- vue 跳转页面带对象_vue跳转页面的几种方法(推荐)
- dyld 加载 Mach-O
- Vue学习笔记之12-前端模块化
- 熊猫烧香系列变种分析报告
- 爱奇艺开源的高性能网络安全监控引擎
- 人口增长模型参数估计matlab,人口增长模型及实现(附MATLAB代码)
- 介绍一款在线仿站小工具
- 蓝瘦香菇!美国帅小伙作死尝试无人机剪头发
热门文章
- 孙鑫-MFC笔记七--文件与注册表
- block的理解 ios_iOS面试--字节跳动最新iOS开发面试题
- 【C++入门】C++ STL概述
- SparkStreaming读取本地文件进行wordCount
- Cmake构建_设置debug与release不同名字
- day23_内置函数(__del__ item系列 ,模块)
- 【PowerShell】逐行处理文本示例
- Spring Annotation是怎么工作的?
- DWR入门教程(http://www.cnblogs.com/cyjch/archive/2012/02/16/2353758.html)
- Linux 性能测试与分析-转