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。

题解

考虑到达楼层的方式,
先用x,y到达某个楼层,然后再一直用z跳。
这样就不怕算重。
设fifif_i表示用x,y走,走到的位置%z为i的最低高度。
那么它对答案的贡献就是(h-fifif_i)/z+1。
考虑到如何求f,
fi+x=fi+xfi+x=fi+xf_{ i+x}=f_i+x
有点像最短路,
于是就用最短路来求就好了。

code

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string.h>
#include <cmath>
#include <math.h>
#include <time.h>
#define ll long long
#define N 500003
#define M 103
using namespace std;int x,y,z,q[N*100],head,tail;
int nxt[N*10],to[N*10],v[N*10],lst[N],tot;
ll h,ans,f[N];
bool bz[N];void ins(int x,int y,int z)
{nxt[++tot]=lst[x];to[tot]=y;v[tot]=z;lst[x]=tot;
}void link(int x,int y)
{int t=y%x;for(int i=0;i<x;i++)ins(i,(i+t)%x,y);
}void spfa()
{memset(bz,1,sizeof(bz));memset(f,127,sizeof(f));int now;for(bz[0]=head=f[0]=0,tail=1;head<tail;){now=q[++head];for(int i=lst[now];i;i=nxt[i])if(f[to[i]]>f[now]+v[i]){f[to[i]]=f[now]+v[i];if(bz[to[i]])bz[q[++tail]=to[i]]=0;}bz[now]=1;}
}int main()
{scanf("%lld",&h);h--;scanf("%d%d%d",&x,&y,&z);if(y>z)swap(y,z);if(y<x)swap(y,x);if(y>z)swap(y,z);link(x,y);link(x,z);spfa();for(int i=0;i<x;i++)if(f[i]<=h)ans=ans+(h-f[i])/x+1;printf("%lld",ans);return 0;
}

JZOJ4722. 【NOIP2016提高A组模拟8.21】跳楼机相关推荐

  1. JZOJ 4676. 【NOIP2016提高A组模拟7.21】模板串

    Description 科学家温斯顿从数据库中找到了一串相当长的字符串. 他正试图用一个模板串来重构这个字符串. 他可以将模板串复制多份,通过合适的方式拼接起来,使得最终的串与原串一致. 如果两个模板 ...

  2. JZOJ 4675. 【NOIP2016提高A组模拟7.21】Double-row

    Description 科学家温斯顿在一张超长的白纸上写下了两行数,每一行数有N个. 但他写完后觉得看起来有点不和谐.他希望重新编排,使得每一行数中没有相同的数. 他每次可以调换同一列的两个数. 请帮 ...

  3. 【JZOJ4790】【NOIP2016提高A组模拟9.21】选数问题

    题目描述 在麦克雷的面前有N个数,以及一个R*C的矩阵.现在他的任务是从N个数中取出R*C个,并填入这个矩阵中.矩阵每一行的法值为本行最大值与最小值的差,而整个矩阵的法值为每一行的法值的最大值.现在, ...

  4. JZOJ 100024. 【NOIP2016提高A组模拟7.6】数球

    Description 小A有n个球,编号分别为1到n,小A每次都会从n个球中取出若干个球,至少取一个,至多取n个,每次取完再放回去,需要满足以下两个条件. 每次取出的球的个数两两不同. 每次取出的球 ...

  5. JZOJ4708. 【NOIP2016提高A组模拟8.20】奇洛金卡达 倒着做的思想+并查集维护

    题目大意 给定一个长度小于等于kk的字符串和qq,表示现在有qq个操作,每个操作给定两个参数li,ril_i,r_i表示把现在的字符串第lil_i到rir_i把其中编号为奇数的按顺序写下来,再在后面把 ...

  6. 【NOIP2016提高A组模拟9.9】闭门造车

    题目 自从htn体验了一把飙车的快感,他就下定决心要闭门造车!但是他两手空空怎么造得出车来呢?无奈的他只好来到了汽车零部件商店. 一走进商店,玲琅满目的各式零件看得htn眼花缭乱.但是他很快便反应过来 ...

  7. [JZOJ4788] 【NOIP2016提高A组模拟9.17】序列

    题目 描述 题目大意 一个序列,每次可以使一段区间内的所有数加一(模四). 问最少的操作次数. 思考历程 一看这题目,诶,这不就是那道叫密码锁的题目吗? 然后随便打一打,样例过了,就再也没有思考这一题 ...

  8. JZOJ 5379. 【NOIP2017提高A组模拟9.21】Victor爱数字

    Description Victor 是一名热爱数字的同学.他最近在思考这样一个问题: 一个字符串是回文的当且仅当它倒过来还和原来相同.那么如果一个数的数串没有一个长度超过1 的子串是回文串的话,它就 ...

  9. JZOJ 4726. 【NOIP2016提高A组模拟8.22】种花

    Description 经过三十多个小时的长途跋涉,小Z和小D终于到了NOI现场--南山南中学.一进校园,小D就被花所吸引了(不要问我为什么),遍和一旁的种花园丁交(J)流(L)了起来. 他发现花的摆 ...

  10. JZOJ 4786. 【NOIP2016提高A组模拟9.17】小a的强迫症

    Description Input Sample Input 3 2 2 1 Output Sample Output 3 样例解释: Data Constraint Solution 首先,我们设之 ...

最新文章

  1. ping程序和tracert(traceroute)背后的故事--ICMP协议
  2. Node.js event loop 和 JS 浏览器环境下的事件循环的区别
  3. C# Cookie操作类
  4. php 数组移除指定健,php删除数组指定键的方法
  5. 基于 Flink 的典型 ETL 场景实现
  6. OpenJudge NOI 1.5 08:多边形内角和
  7. matlab采样序列幅频特性,数字信号处理课设计指导书20130530.doc
  8. 看看async,await 是如何简化异步的调用WCF!
  9. 编辑器eslint格式_VScode格式化代码,开启ESlint代码检测方法,eslint代码配置
  10. 今日早上出来还是阴天
  11. 解决问题:swiper动态加载图片后无法滑动
  12. python 路径的操作
  13. linux下清理脚本,脚本--Linux下清理IPC资源
  14. c++ Primer plus 之c++学习
  15. 驾照考试之科目二(深圳仙田版)
  16. 人脸识别活体检测sdk 百度 python_Python百度人脸识别SDK的使用
  17. macos 安装cms php,苹果cms安装及配置详细教程
  18. html简单的任务管理系统实现,用Javascript实现Windows任务管理器的代码
  19. 4412 fimc to hdmi
  20. ES索引恢复流程解析

热门文章

  1. 手机uc7.2java版下载_UC浏览器 JAVA
  2. java lpad oracle_oracle函数lpad的简单用法
  3. OV426+OVM6946基于FPGA调试成像
  4. 最新版腾讯防水墙(二代)识别
  5. 复合函数求导经典例题_复合函数求导公式大全_复合函数求导法则_复合函数求导经典例题_复合函数求导导学案...
  6. win10休眠_最牛的win10优化设置方法大全
  7. 计算机毕设人寿保险项目,2017年中国人寿集团在京各直属单位接收毕业生情况公示...
  8. 面试题53:vue数据的双向绑定原理(如何实现vue的双向绑定)
  9. Unity chan下载
  10. Go chan的底层原理