Description

DJL为了避免成为一只咸鱼,来找srwudi学习压代码的技巧。
Srwudi的家是一幢h层的摩天大楼。由于前来学习的蒟蒻越来越多,srwudi改造了一个跳楼机,使得访客可以更方便的上楼。
经过改造,srwudi的跳楼机可以采用以下四种方式移动:
1、向上移动x层;
2、向上移动y层;
3、向上移动z层;
4、回到第一层。
一个月黑风高的大中午,DJL来到了srwudi的家,现在他在srwudi家的第一层,碰巧跳楼机也在第一层。DJL想知道,他可以乘坐跳楼机前往的楼层数。

Input

第一行一个整数h,表示摩天大楼的层数。
第二行三个正整数,分别表示题目中的x, y, z。

Output

一行一个整数,表示DJL可以到达的楼层数。

Sample Input

15
4 7 9

Sample Output

9
样例解释
可以到达的楼层有:1,5,8,9,10,12,13,14,15

Data Constraint

对于20%的数据,1≤h, x, y, z≤100;
对于40%的数据,1≤h, x, y, z≤10^5;
对于100%的数据,1≤h≤10^18,1≤x, y, z≤10^5。

思路

设f[i]为(ax+by+cz+1)%x=i的最小的数
显然,每个数对答案的贡献为(h-f[i])/x+1
统计f[i]可以运用最短路来实现

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#define ll long long
using namespace std;
const ll inf=1e18+77;
const int maxn=1e5+77;
int x,y,z,list[maxn],cnt=0;
ll h,ans=0,f[maxn];
bool b[maxn];
struct E
{int to,next,v;
}e[maxn*6];
void add(int u,int v,int val)
{e[++cnt].to=v; e[cnt].next=list[u]; list[u]=cnt; e[cnt].v=val;
//  printf("u=%d v=%d val=%d\n",u,v,val);
}
void spfa()
{queue<int> q;for(int i=0; i<x; i++) f[i]=inf;memset(b,0,sizeof(b));q.push(1%x); f[1%x]=1; b[1%x]=1;while(!q.empty()){int u=q.front(); q.pop();for(int i=list[u]; i!=-1; i=e[i].next){int v=e[i].to; if(v==-1) continue;if(f[u]+1ll*e[i].v<f[v])    {f[v]=f[u]+1ll*e[i].v;if(!b[v]) q.push(v),b[v]=1;}}b[u]=0;}
}
int main()
{scanf("%lld",&h); scanf("%d%d%d",&x,&y,&z);memset(list,-1,sizeof(list));if(x<y) swap(x,y); if(x<z) swap(x,z);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>=f[i])ans+=1ll*(h-f[i])/x+1;printf("%lld",ans);
}

【JZOJ A组】跳楼机相关推荐

  1. 同余最短路(P3403 跳楼机)

    同余最短路 前置 给定m个数,这m个数可以重复取,问最大的这m个数不能拼成的数,或者给定一定范围,范围里有多少个数是这m个数可以拼成的,对于这种问题我们可以考虑同余最短路的算法. P3403 跳楼机 ...

  2. M5311模组烤机测试装置(Arduino)

    title: M5311模组烤机测试装置 tags: NBIOT date: 2019-10-11 10:53:00 项目要求: 由于只是测试程序 所以我采用了arduino promini 来完成. ...

  3. 【洛谷3043】跳楼机(最短路)

    [洛谷3043]跳楼机(最短路) 题面 洛谷 题解 思路很妙嗷. 先只考虑只用\(y,z\)两种移动方式,它们一定能够到达一些楼层, 那么这些楼层再只用\(x\)拓展就能够计算答案. 那么我们这样子计 ...

  4. 【洛谷 P3403】跳楼机(SPFA)

    P3403 跳楼机 题目背景 DJL为了避免成为一只咸鱼,来找srwudi学习压代码的技巧. 题目描述 Srwudi的家是一幢h层的摩天大楼.由于前来学习的蒟蒻越来越多,srwudi改造了一个跳楼机, ...

  5. 机器人无限火力无限e符文_无限火力装备符文评级 召唤师峡谷秒变欢乐谷 机器人化身跳楼机...

    无限火力模式激情上线,拥有80%超快冷却缩减的BUFF,一切都和召唤师峡谷不同.那么在无限火力模式中,哪些装备符文能拥有更为亮眼的表现呢? 装备篇 无限火力最爽的一点就是--装备也能够享受80%的冷却 ...

  6. jetson orin nx 模组刷机及环境配置(一)

    jetson orin nx 模组刷机 前言 1.刷机教程 1.1想重新安装系统 1.2不想重新安装系统或安装好后二次刷机 2.检查环境 前言 刚接到板子时板子上已经装好了jetson-linux系统 ...

  7. JZOJ #4722 跳楼机 (最短路模型的完美转化)

    题目描述: 给出$h,x,y,z$,求在$h$以内,$x,y,z$可以凑出多少个不同的数.$(1\leq{h}\leq{10^{18}},1\leq{x,y,z}\leq{10^5})$ 解题思路: ...

  8. 设置允许从网络访问计算机的用户账户(加入guest组),多机组网问题 如何设置局域网文件共享(2)...

    文件共享问题解决方法: Windows 98/2000/XP/2003访问XP的用户验证问题 首先关于启用Guest为什么不能访问的问题: 1.默认情况下,XP 禁用Guest帐户 2.默认情况下,X ...

  9. jzoj C组 2017.1.19 比赛

    第一题--小x的游戏 题目描述 Tac游戏在一个4*4的方格上进行.起先可能会在16个方格中出现一个标记'T',其余的方格是空着的.游戏有两个玩家,小x和小o.小x先开始,然后游戏轮流进行.每一步玩家 ...

最新文章

  1. Linux工具快速上手,Linux很实用命令
  2. php 新浪url,PHP URL函数详解
  3. 只读数据文件损坏恢复
  4. DBCacheServer升级
  5. 在线教育雪崩:藏在家长群里的“水军”消失了
  6. UnityParticle3:3x常用模块
  7. 【BZOJ4538】【HNOI2016】网络(树链剖分,线段树,堆)
  8. 那些一毕业就选择华为的人,后来都怎么样了
  9. 7.2.Zeng_Cache(3) --- 前端
  10. 今天下午又是在教室里坐了一个下午,头有点晕
  11. iOS 10 通知 --UserNotifications
  12. 蓝桥杯比赛时间在什么时候_什么时候立冬2020年农历具体时间
  13. 排序专题——8.基数排序之LSD法
  14. 最近点对问题(蛮力法和分治法)
  15. L1-5判断题(15分)
  16. 中国保健品市场供需规模与投资前景预测分析报告2022-2027年版
  17. Office WORD如何简繁转换
  18. 火狐firefox切换全球服务 火狐不同步问题
  19. 2.文件的打开及创建_open函数_creat函数
  20. 实名认证接口 实名制API

热门文章

  1. 打印多张分页图片工具类
  2. HDBaseT是什么协议?与SDI和HDMI比较有哪些区别?
  3. 运维知识AD域控基本功能介绍教程
  4. 快讯 | 依斯特与嘉益仕(Litns)再续合作,共建智慧供应链平台
  5. 如何选择你的移动APP KPIs(关键绩效指标)
  6. Android使用笔记--艰难的减肥过程
  7. matlab三相电路基波图形,毕业设计基于matlab的三相交流调压电路的设计与仿真.doc...
  8. 零基础语法入门第八讲 实意动词的否定/提问/回答
  9. 搭建呼叫中心系统几点注意事项
  10. 获得1688商品快递费用 API