[spfa][数论]JZOJ 4722 跳楼机
Description
DJL为了避免成为一只咸鱼,来找srwudi学习压代码的技巧。
Srwudi的家是一幢h层的摩天大楼。由于前来学习的蒟蒻越来越多,srwudi改造了一个跳楼机,使得访客可以更方便的上楼。
经过改造,srwudi的跳楼机可以采用以下四种方式移动:
1、向上移动x层;
2、向上移动y层;
3、向上移动z层;
4、回到第一层。
一个月黑风高的大中午,DJL来到了srwudi的家,现在他在srwudi家的第一层,碰巧跳楼机也在第一层。DJL想知道,他可以乘坐跳楼机前往的楼层数。
Input
第二行三个正整数,分别表示题目中的x, y, z。
Output
Sample Input
154 7 9
Sample Output
9样例解释可以到达的楼层有:1,5,8,9,10,12,13,14,15
Data Constraint
对于40%的数据,1≤h, x, y, z≤10^5;
对于100%的数据,1≤h≤10^18,1≤x, y, z≤10^5。
分析
我们给%x意义下的能够从某个高度到某个高度的情况视为
i-->i+y (%x)
i-->i+z (%x)
那么显然我们可以通过这些“边“跑最短路
然后答案为∑j=0~x-1(h-d[j])/x+1
#include <iostream> #include <cstdio> #include <queue> #include <memory.h> using namespace std; typedef long long ll; const int N=1e5+111; const ll Inf=9223372036854775807; struct Edge {int u,v,nx;ll w; }g[2*N]; ll d[N]; bool b[N]; int cnt,list[N]; ll h,x,y,z,ans;void Add(ll u,ll v,ll w) {g[++cnt].u=u;g[cnt].v=v;g[cnt].w=w;g[cnt].nx=list[u];list[u]=cnt; }void Spfa() {queue<int> q;while (!q.empty()) q.pop();for (int i=0;i<=x;i++) d[i]=Inf;q.push(1);d[1]=1;b[1]=1;while (!q.empty()) {int u=q.front();q.pop();for (int i=list[u];i;i=g[i].nx)if (d[g[i].v]>d[u]+g[i].w) {d[g[i].v]=d[u]+g[i].w;if (!b[g[i].v]) q.push(g[i].v);b[g[i].v]=1;}b[u]=0;} }int main() {scanf("%lld",&h);scanf("%lld%lld%lld",&x,&y,&z);if (y<z) swap(y,z);if (x<y) swap(x,y);for (int i=0;i<x;i++) {Add(i,(i+y)%x,y);Add(i,(i+z)%x,z);}Spfa();for (int i=0;i<x;i++) if (h-d[i]>=0) ans+=(h-d[i])/x+1;printf("%lld",ans); }
View Code
转载于:https://www.cnblogs.com/mastervan/p/9526193.html
[spfa][数论]JZOJ 4722 跳楼机相关推荐
- 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】跳楼机(SPFA)
P3403 跳楼机 题目背景 DJL为了避免成为一只咸鱼,来找srwudi学习压代码的技巧. 题目描述 Srwudi的家是一幢h层的摩天大楼.由于前来学习的蒟蒻越来越多,srwudi改造了一个跳楼机, ...
- 【JZOJ A组】跳楼机
Description DJL为了避免成为一只咸鱼,来找srwudi学习压代码的技巧. Srwudi的家是一幢h层的摩天大楼.由于前来学习的蒟蒻越来越多,srwudi改造了一个跳楼机,使得访客可以更方 ...
- 同余最短路(P3403 跳楼机)
同余最短路 前置 给定m个数,这m个数可以重复取,问最大的这m个数不能拼成的数,或者给定一定范围,范围里有多少个数是这m个数可以拼成的,对于这种问题我们可以考虑同余最短路的算法. P3403 跳楼机 ...
- 【洛谷3043】跳楼机(最短路)
[洛谷3043]跳楼机(最短路) 题面 洛谷 题解 思路很妙嗷. 先只考虑只用\(y,z\)两种移动方式,它们一定能够到达一些楼层, 那么这些楼层再只用\(x\)拓展就能够计算答案. 那么我们这样子计 ...
- 机器人无限火力无限e符文_无限火力装备符文评级 召唤师峡谷秒变欢乐谷 机器人化身跳楼机...
无限火力模式激情上线,拥有80%超快冷却缩减的BUFF,一切都和召唤师峡谷不同.那么在无限火力模式中,哪些装备符文能拥有更为亮眼的表现呢? 装备篇 无限火力最爽的一点就是--装备也能够享受80%的冷却 ...
- [2019 牛客CSP-S提高组赛前集训营4题解] 复读数组(数论)+ 路径计数机(数上DP)+ 排列计数机(线段树+二项式定理)
文章目录 T1:复读数组 题目 题解 代码实现 T2:路径计数机 题目 题解 代码实现 T3:排列计数机 题目 题解 CODE T1:复读数组 题目 有一个长为n×k的数组,它是由长为n的数组A1,A ...
- 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,结果超时了,为什么呢?因 ...
- P3403 跳楼机 同余最短路
传送门 题意: 思路: 转换一下题目就是用若干x,y,zx,y,zx,y,z能凑出来多少个<=h<=h<=h的数.先考虑两个数y,zy,zy,z的情况,我们如果能求出来这两个数能凑出 ...
最新文章
- linux 文本行倒叙,Linux基础(4)之文本处理
- 经典网络AlexNet介绍
- php类使用场景,php类与对象得使用场景
- 2019-1-17王志颖 c语言作业
- Python搭建静态web服务器
- Manual手册的正确姿势
- android手机编译可运行的linux程序
- mysql极客_极客mysql16
- Showdoc 搭建项目 API 文档系统
- php使用函数封装去除空格,去除php注释和去除空格函数分享_PHP教程
- ONES X 中农网|多产品线研发项目管理实践
- nginx配置实现代理多个内网地址
- Android Studio修改主题设置主题背景图片
- 一款基于Zigbee技术的智慧鱼塘系统研究与设计
- 解决IE浏览器打开,出现不能为“read”的问题
- 201819102040张辰飞
- mix2s android p,待遇堪比“亲儿子” 小米MIX 2s迎来Android P升级
- linux驱动21:内核创建类class_create
- key 、primary key 、unique key 与index区别
- 广告效果聚类分析(KMeans)