博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[spfa] Jzoj P4722 跳楼机
阅读量:4966 次
发布时间:2019-06-12

本文共 1740 字,大约阅读时间需要 5 分钟。

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。

 

 

题解

  • 首先,我们知道,如果a可以到达,那么也可以到达
  • 那么,一个到达的高度l=ax+by+cz
  • 可以先不考虑x,设f[i]为到模x下高度i的可以到达的最小楼层
  • 如果我们得到了所有f,答案就是
  • 那么如果不考虑x的话,就只有两种转移:
  • ①f[(i+y)%x]=f[i]+y
  • ②f[(i+z)%x]=f[i]+z
  • 也就是一个最短路模型,直接spfa(这题居然不卡spfa)

代码

1 #include 
2 #include
3 #include
4 using namespace std; 5 queue
Q; 6 struct edge {
int to,from,v;}e[200010]; 7 long long dis[100010],ans,h; 8 int x,y,z,cnt,visit[100010],head[100010]; 9 void insert(int x,int y,int v) { e[++cnt].to=y; e[cnt].from=head[x]; e[cnt].v=v; head[x]=cnt; }10 void spfa(int s)11 {12 memset(dis,-1,sizeof(dis));13 dis[s]=visit[s]=1; Q.push(s);14 while (!Q.empty())15 {16 int u=Q.front(); Q.pop();17 visit[u]=0;18 for (int i=head[u];i;i=e[i].from)19 if (dis[e[i].to]==-1||dis[e[i].to]>dis[u]+e[i].v)20 {21 dis[e[i].to]=dis[u]+e[i].v;22 if (!visit[e[i].to]) visit[e[i].to]=1,Q.push(e[i].to);23 }24 }25 }26 int main()27 {28 scanf("%lld%d%d%d",&h,&x,&y,&z);29 for (int i=0;i
=0) ans+=(h-dis[i])/x+1;32 printf("%lld",ans);33 }

 

转载于:https://www.cnblogs.com/Comfortable/p/9519822.html

你可能感兴趣的文章
MVC系列学习(三)-EF的延迟加载
查看>>
C++函数调用方式约定stdcall,cdecl,pascal,naked,thiscall,fastcall
查看>>
HDU 2846(Trie树)
查看>>
接口测试必备技能之入门到上手
查看>>
js排序算法02——插入排序
查看>>
数据库水平切分的实现原理解析——分库,分表,主从,集群,负载均衡器(转)...
查看>>
SpringDataRedis java.net.UnknownHostException: 127.0.0.1 错误
查看>>
Spring Boot配置文件
查看>>
你的flume-ng的第一篇博客
查看>>
hdu 2159
查看>>
图片、JQuery学习笔记(图片的展开和伸缩)-by小雨
查看>>
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again
查看>>
swift中 if let 与 guard let 对比,guard会降低一个分支
查看>>
C/C++框架和库 (真的很强大) 转
查看>>
Zabbix-3.0.3结合Grafana-3.1.0给你想要的绘图
查看>>
LVS 源代码分析
查看>>
Centos python 2.6 升级到2.7.3
查看>>
mysql 5.6 与5.7安装
查看>>
超时时间已到。在操作完成之前超时时间已过或服务器未响应。 (.Net SqlClient Data Provider)...
查看>>
数据结构与算法分析(三)
查看>>