传送门

题意:

思路: 转换一下题目就是用若干x,y,zx,y,zx,y,z能凑出来多少个<=h<=h<=h的数。先考虑两个数y,zy,zy,z的情况,我们如果能求出来这两个数能凑出来的数设为sumsumsum,让后sum+kx<=hsum+kx<=hsum+kx<=h求出来有多少个k即可。然鹅直接求也是不行的,因为hhh很大,如果hhh很小我们直接bfsbfsbfs跑一遍就好啦。考虑优化sum+kx<=hsum+kx<=hsum+kx<=h这个式子。可以看到我们只需要最大化kkk即可,也就是最小化sumsumsum,也即是让 summodxsum\bmod xsummodx,现在定义dis[i]dis[i]dis[i]为能到达iii所需要走的最小层数(i为在模xxx的意义下的)。算出来dis[i]dis[i]dis[i]之后可以通过ans+=(h−dis[i])/x+1ans+=(h-dis[i])/x+1ans+=(h−dis[i])/x+1算出来答案。

disdisdis没开LLLLLL,直接自闭。

设模数为xxx,用dijkstradijkstradijkstra的话可以O(xlogx)O(xlogx)O(xlogx)

//#pragma GCC optimize(2)
#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<map>
#include<cmath>
#include<cctype>
#include<vector>
#include<set>
#include<queue>
#include<algorithm>
#include<sstream>
#include<ctime>
#include<cstdlib>
#define X first
#define Y second
#define L (u<<1)
#define R (u<<1|1)
#define pb push_back
#define mk make_pair
#define Mid (tr[u].l+tr[u].r>>1)
#define Len(u) (tr[u].r-tr[u].l+1)
#define random(a,b) ((a)+rand()%((b)-(a)+1))
#define db puts("---")
using namespace std;//void rd_cre() { freopen("d://dp//data.txt","w",stdout); srand(time(NULL)); }
//void rd_ac() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//AC.txt","w",stdout); }
//void rd_wa() { freopen("d://dp//data.txt","r",stdin); freopen("d://dp//WA.txt","w",stdout); }typedef long long LL;
typedef unsigned long long ULL;
typedef pair<int,int> PII;const int N=1000010,mod=1e9+7,INF=0x3f3f3f3f;
const double eps=1e-6;LL x,y,z;
LL h;
LL dis[N];
bool st[N];void bfs()
{memset(dis,63,sizeof(dis));queue<int>q; q.push(1%x);st[1%x]=1; dis[1%x]=1;while(q.size()){int u=q.front(); q.pop();st[u]=false;int t=(u+y)%x;if(dis[t]>dis[u]+y){dis[t]=dis[u]+y;if(!st[t]) st[t]=1,q.push(t);}t=(u+z)%x;if(dis[t]>dis[u]+z){dis[t]=dis[u]+z;if(!st[t]) st[t]=1,q.push(t);}}
}int main()
{//  ios::sync_with_stdio(false);
//  cin.tie(0);cin>>h>>x>>y>>z;bfs();LL ans=0;for(int i=0;i<x;i++) if(dis[i]<=h) ans+=(h-dis[i])/x+1;printf("%lld\n",ans);return 0;
}
/**/

P3403 跳楼机 同余最短路相关推荐

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

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

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

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

  3. 【算法笔记】一步一步推出来的同余最短路优化思路(千字长文,超详细)

    整理的算法模板合集: ACM模板 目录 同余最短路 例题1:luogu P3403 跳楼机 例题2:luogu P2371 [国家集训队]墨墨的等式 例题3:luogu P2662 牛场围栏 同余最短 ...

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

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

  5. 【学习笔记】同余最短路

    同余最短路是用来解决一类 ∑i=1naixi∈[L,R]\sum_{i=1}^n a_ix_i\in[L,R]∑i=1n​ai​xi​∈[L,R] 问题的方法. 其中 L,RL,RL,R 值非常大,而 ...

  6. 【JZOJ A组】跳楼机

    Description DJL为了避免成为一只咸鱼,来找srwudi学习压代码的技巧. Srwudi的家是一幢h层的摩天大楼.由于前来学习的蒟蒻越来越多,srwudi改造了一个跳楼机,使得访客可以更方 ...

  7. 牛客 - Yuki with emofunc and playf(同余最短路)

    题目链接:点击查看 题目大意:初始时给出一个数字 y=1y=1y=1 和一个辅助数字 xxx,每回合可以执行两种操作中的一种: y=y∗10y=y*10y=y∗10 y=y+x−1y=y+x-1y=y ...

  8. P2662 牛场围栏(同余最短路)

    P2662 牛场围栏 思路 假设我们已经知道同余最短路是什么了,这里就不再过多赘述. 我们要尽可能地得到更多地课建成地边,那么我们必然要选一个basebasebase相对小的,因此我们可以对所有的棍子 ...

  9. 湖南大学第十六届程序设计竞赛 B Yuki with emofunc and playf 同余最短路

    传送门 文章目录 题意: 思路: 题意: 初始有一个数111,你每次可以将其∗10*10∗10或者+(x−1)+(x-1)+(x−1),现在给你xxx,问最少经过多少步能到达nnn. 1≤n≤1e6, ...

最新文章

  1. 虚拟机下CentOS 6.5配置IP地址的三种方法
  2. CUMCM:05B  DVD在线租赁
  3. quick sort
  4. 深入理解 Ribbon-Hystrix-Feign 三者之间的关系(一)
  5. 数据库设计原则:应该使用软删除吗?
  6. 华为私有云的搭建方案_最简单的纯软件私有云搭建方案,我来教你
  7. 20应用统计考研复试要点(part18)--概率论与数理统计
  8. bzoj 3928: [Cerc2014] Outer space invaders
  9. 北航 2012 秋季 现代软件工程 两人结对 作业要求
  10. 第一百七十四天 how can i 坚持
  11. Delphi 2009 的反射单元(ObjAuto):
  12. MySQL数据库卸载手册
  13. 设置单行文本溢出省略导致不能自适应宽度,white-space: nowrap
  14. 【python算法】算法之线性增长与二次方增长小实验举例
  15. java mp3合并_java如何实现把两首MP3一系列的帧进行合并
  16. 工作量单位-人月、人日、人时 详解
  17. HTML用css把英文字母改大,CSS转换英文大小写text-transform属性
  18. 苹果留给 iOS 开发者的时间不多了:30 天内必须更新旧版本!
  19. 互联网巨头的人工智能野心,你看懂了吗?
  20. IUSR_用户(Internet来宾账号)

热门文章

  1. 现在竟然还有补丝袜的?
  2. 他让全世界凶手睡不着觉,现实版福尔摩斯,退休了4次又被拽回来工作,无敌实在是太寂寞了~...
  3. 全校师生放6天春假;清华大学设立天文系;郭守敬望远镜光谱数突破千万;《自然》发表最新发现;百度败诉需道歉;这就是今天的大新闻...
  4. 如何发送html email,如何发送HTML电子邮件?
  5. 下图为双总线结构机器的数据通路_海康机器人为物流加码:进击吧,双11新“打工人”...
  6. d.ts文件可以注释html吗,如何编写一个d.ts文件的步骤详解_旧店_前端开发者
  7. HTML坐标不随着屏幕大小改变,HTML热区map坐标,随窗口大小自适应办法(javascript)...
  8. linux中显示目录名,在linux下显示中文目录和文件名
  9. activity 防止多次打开_Android开发Activity任务和返回栈
  10. python怎么安装开发版_python - easy_install的安装和使用