P3403 跳楼机 同余最短路
传送门
题意:
思路: 转换一下题目就是用若干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 跳楼机 同余最短路相关推荐
- 同余最短路(P3403 跳楼机)
同余最短路 前置 给定m个数,这m个数可以重复取,问最大的这m个数不能拼成的数,或者给定一定范围,范围里有多少个数是这m个数可以拼成的,对于这种问题我们可以考虑同余最短路的算法. P3403 跳楼机 ...
- 【洛谷 P3403】跳楼机(SPFA)
P3403 跳楼机 题目背景 DJL为了避免成为一只咸鱼,来找srwudi学习压代码的技巧. 题目描述 Srwudi的家是一幢h层的摩天大楼.由于前来学习的蒟蒻越来越多,srwudi改造了一个跳楼机, ...
- 【算法笔记】一步一步推出来的同余最短路优化思路(千字长文,超详细)
整理的算法模板合集: ACM模板 目录 同余最短路 例题1:luogu P3403 跳楼机 例题2:luogu P2371 [国家集训队]墨墨的等式 例题3:luogu P2662 牛场围栏 同余最短 ...
- 【洛谷3043】跳楼机(最短路)
[洛谷3043]跳楼机(最短路) 题面 洛谷 题解 思路很妙嗷. 先只考虑只用\(y,z\)两种移动方式,它们一定能够到达一些楼层, 那么这些楼层再只用\(x\)拓展就能够计算答案. 那么我们这样子计 ...
- 【学习笔记】同余最短路
同余最短路是用来解决一类 ∑i=1naixi∈[L,R]\sum_{i=1}^n a_ix_i\in[L,R]∑i=1naixi∈[L,R] 问题的方法. 其中 L,RL,RL,R 值非常大,而 ...
- 【JZOJ A组】跳楼机
Description DJL为了避免成为一只咸鱼,来找srwudi学习压代码的技巧. Srwudi的家是一幢h层的摩天大楼.由于前来学习的蒟蒻越来越多,srwudi改造了一个跳楼机,使得访客可以更方 ...
- 牛客 - 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 ...
- P2662 牛场围栏(同余最短路)
P2662 牛场围栏 思路 假设我们已经知道同余最短路是什么了,这里就不再过多赘述. 我们要尽可能地得到更多地课建成地边,那么我们必然要选一个basebasebase相对小的,因此我们可以对所有的棍子 ...
- 湖南大学第十六届程序设计竞赛 B Yuki with emofunc and playf 同余最短路
传送门 文章目录 题意: 思路: 题意: 初始有一个数111,你每次可以将其∗10*10∗10或者+(x−1)+(x-1)+(x−1),现在给你xxx,问最少经过多少步能到达nnn. 1≤n≤1e6, ...
最新文章
- 虚拟机下CentOS 6.5配置IP地址的三种方法
- CUMCM:05B DVD在线租赁
- quick sort
- 深入理解 Ribbon-Hystrix-Feign 三者之间的关系(一)
- 数据库设计原则:应该使用软删除吗?
- 华为私有云的搭建方案_最简单的纯软件私有云搭建方案,我来教你
- 20应用统计考研复试要点(part18)--概率论与数理统计
- bzoj 3928: [Cerc2014] Outer space invaders
- 北航 2012 秋季 现代软件工程 两人结对 作业要求
- 第一百七十四天 how can i 坚持
- Delphi 2009 的反射单元(ObjAuto):
- MySQL数据库卸载手册
- 设置单行文本溢出省略导致不能自适应宽度,white-space: nowrap
- 【python算法】算法之线性增长与二次方增长小实验举例
- java mp3合并_java如何实现把两首MP3一系列的帧进行合并
- 工作量单位-人月、人日、人时 详解
- HTML用css把英文字母改大,CSS转换英文大小写text-transform属性
- 苹果留给 iOS 开发者的时间不多了:30 天内必须更新旧版本!
- 互联网巨头的人工智能野心,你看懂了吗?
- IUSR_用户(Internet来宾账号)
热门文章
- 现在竟然还有补丝袜的?
- 他让全世界凶手睡不着觉,现实版福尔摩斯,退休了4次又被拽回来工作,无敌实在是太寂寞了~...
- 全校师生放6天春假;清华大学设立天文系;郭守敬望远镜光谱数突破千万;《自然》发表最新发现;百度败诉需道歉;这就是今天的大新闻...
- 如何发送html email,如何发送HTML电子邮件?
- 下图为双总线结构机器的数据通路_海康机器人为物流加码:进击吧,双11新“打工人”...
- d.ts文件可以注释html吗,如何编写一个d.ts文件的步骤详解_旧店_前端开发者
- HTML坐标不随着屏幕大小改变,HTML热区map坐标,随窗口大小自适应办法(javascript)...
- linux中显示目录名,在linux下显示中文目录和文件名
- activity 防止多次打开_Android开发Activity任务和返回栈
- python怎么安装开发版_python - easy_install的安装和使用