同余最短路(P3403 跳楼机)

同余最短路

前置

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

P3403 跳楼机

同余最短路介绍

首先我们要选择一个basebasebase作为基底,之后所有的距离就可以描述成a∗base+ba * base + babase+b

在这题中我们选定xxx作为base。

dis[i]=valuedis[i] = valuedis[i]=value有如下含义:value≡i(modx)value \equiv i \pmod xvaluei(modx),也就是同余的条件下,我们可以到达的最小的楼层,这样我们剩下的楼层就可以通过+x+ x+x的操作去访问,所以我们最后的可以到达的楼层也就是∑i=0x−1(h−dis[i])/x+1\sum _{i = 0} ^ {x - 1} (h - dis[i]) / x + 1i=0x1(hdis[i])/x+1,这句应该稍加简单理解一下就好了。

接下来我们考虑如何建边,显然有i−>(i+y)%xcost=y,i−>(i+z)%xcost=zi - > (i + y) \% x\ cost = y, i -> (i + z) \% x\ cost = zi>(i+y)%x cost=y,i>(i+z)%x cost=z

所以我们可以对所有的x∈[0,x−1]x\in [0, x - 1]x[0,x1],分别同上建立一条边权为yyy的,一条边权为zzz的边。然后再去跑一遍最短路,我们就可以得到所有的disdisdis了。

代码

/*Author : lifehappy
*/
#pragma GCC optimize(2)
#pragma GCC optimize(3)
#include <bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define endl '\n'using namespace std;typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;const double pi = acos(-1.0);
const double eps = 1e-7;
const int inf = 0x3f3f3f3f;inline ll read() {ll f = 1, x = 0;char c = getchar();while(c < '0' || c > '9') {if(c == '-')    f = -1;c = getchar();}while(c >= '0' && c <= '9') {x = (x << 1) + (x << 3) + (c ^ 48);c = getchar();}return f * x;
}void print(ll x) {if(x < 10) {putchar(x + 48);return ;}print(x / 10);putchar(x % 10 + 48);
}const int N = 1e5 + 10;ll h, dis[N];bool visit[N];vector<pii> G[N];void spfa() {memset(dis, 0x3f, sizeof dis);queue<int> q;q.push(1);dis[1] = 1, visit[1] = 1;while(q.size()) {int temp = q.front();q.pop();visit[temp] = 0;for(pii i : G[temp]) {if(dis[i.first] > dis[temp] + i.second) {dis[i.first] = dis[temp] + i.second;if(!visit[i.first]) {q.push(i.first);visit[i.first] = 1;}}}}
}int main() {// freopen("in.txt", "r", stdin);// freopen("out.txt", "w", stdout);// ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);h = read();int x = read(), y = read(), z = read();if(x == 1 ||  y == 1 || z == 1) {//注意如果有一个数为1,必须特判,不然我们跑出来的最短路dis,将会重复计数。printf("%lld\n", h);return 0;}for(int i = 0; i < x; i++) {G[i].pb(mp((i + y) % x, y));G[i].pb(mp((i + z) % x, z));}spfa();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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8月语言排行:C#继续呈现增长态势

TIOBE 编程语言排行榜 8 月更新已公布&#xff0c;排名前十的分别是&#xff1a;Java, C, Python, C, C#, Visual Basic .NET, JavaScript, PHP, Objective-C 和 SQL。和上个月唯一的不同之处在于 Objective-C 和 SQL 的排名发生了交换。事实上&#xff0c;上周 Dice Insights …

Codeforces Round #538 (Div. 2) F. Please, another Queries on Array? 线段树 + 欧拉函数

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个序列aaa&#xff0c;你需要实现两种操作&#xff1a; (1)(1)(1) 将[l,r][l,r][l,r]的aia_iai​都乘rrr。 (2)(2)(2) 求ϕ(∏ilrai)mod1e97\phi(\prod_{il}^ra_i)\bmod 1e97ϕ(∏ilr​ai​)mod1e97 1…

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

P2662 牛场围栏 思路 假设我们已经知道同余最短路是什么了&#xff0c;这里就不再过多赘述。 我们要尽可能地得到更多地课建成地边&#xff0c;那么我们必然要选一个basebasebase相对小的&#xff0c;因此我们可以对所有的棍子排个序&#xff0c;然后取a[1]−ma[1] - ma[1]−…

面试必谈的哈希,.Net 程序员温故而知新

引言&#xff1a;作为资深老鸟&#xff0c;有事没事&#xff0c;出去面试&#xff1b;找准差距、定位价值。面试必谈哈希&#xff0c;Q1&#xff1a;什么是哈希?Q2&#xff1a;哈希为什么快?Q3&#xff1a;你是怎么理解哈希算法利用空间换取时间的&#xff1f;Q4&#xff1a;…

P3804 【模板】后缀自动机 (SAM)

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个字符串sss&#xff0c;让你求sss中出现次数不为111的子串出现次数乘上该字串长度最大值。 ∣s∣≤1e6|s|\le 1e6∣s∣≤1e6 思路&#xff1a; 没学明白&#xff0c;不多bbbbbb&#xff0c;把树建出…

Grpc Proto To Nuget Package 插件使用说明

Grpc Proto To Nuget Package 是一个 VS 插件&#xff08;支持 VS2019&#xff09;&#xff0c;目的是将基于 gRPC 的接口定义 .proto 文件一键转成 Nuget Package&#xff0c;然后发布到私有仓库上。下载最新 GrpcProtoToNugetPackageTemplate.zip ASP.NET 的项目模板&#xf…

HDU 6071 Lazy Running(同余最短路的应用)

Lazy Running 思路 还是利用同余的思想&#xff0c;假设存在一条长度为kkk的路&#xff0c;那么也一定存在一条kbasek basekbase的路base2∗min(d1,d2)base 2 * min(d1, d2)base2∗min(d1,d2)。 dis[i][j]xdis[i][j] xdis[i][j]x表示的是&#xff0c;从2−>i2 -> i2…

P2408 不同子串个数 SAM

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 求sss中本质不同的字串个数。 1≤∣s∣≤1e51\le |s|\le 1e51≤∣s∣≤1e5 思路&#xff1a; 显然&#xff0c; 个数就是∑(len[i]−len[fa[i]])\sum (len[i]-len[fa[i]])∑(len[i]−len[fa[i]])。 //#pr…

.NET Core 3.0预览版7中的ASP.NET Core和Blazor更新

.NET Core 3.0 Preview 7现已推出&#xff0c;它包含一系列ASP.NET Core和Blazor的新更新。以下是此预览中的新功能列表&#xff1a;最新的Visual Studio预览包括.NET Core 3.0作为默认运行时Visual Studio中的顶级ASP.NET核心模板简化的网页模板组件的属性splattingTypeConver…

数列分块入门 (1 ~ 7)

分块 6277. 数列分块入门 1 分块思想 我们把每m个元素分成一块&#xff0c;所以我们总共的块数就是n/mn / mn/m块&#xff0c;一般情况下我们取mnm \sqrt{n}mn​.对于区间加操作&#xff0c;我们可以先暴力左右两边&#xff0c;然后对于中间的整块的部分的加减&#xff0c;…

UVA719 Glass Beads 最小表示 / 后缀自动机

传送门 题意&#xff1a; 求sss的最小表示。 ∣s∣≤1e4|s|\le 1e4∣s∣≤1e4 思路&#xff1a; 可以选择直接套最小表示法的板子&#xff0c;但也可以将sss复制&#xff0c;即ssssssssssss&#xff0c;对ssssss建samsamsam&#xff0c;让后贪心的找一个长度为nnn的字典序最…

你必须知道的Docker数据卷

本篇已加入《.NET Core on K8S学习实践系列文章索引》&#xff08;微信上暂无法访问&#xff0c;可以通过cnblogs博客园访问&#xff09;&#xff0c;可以点击查看更多容器化技术相关系列文章。本篇预计阅读时间为5分钟。01—Docker数据挂载到容器在Docker中&#xff0c;要想实…

牛客小白月赛11:Rinne Loves Data Structure

Rinne Loves Data Structure 思路 我们插入的位置大概分了四种&#xff1a; 第一种 显然我们找到比当前插入的值的pre&#xff0c;也就是比当前节点大的最小值。 第二种 我们只要找到当前节点的suc&#xff0c;也就是比当前节点小的&#xff0c;最大值。 第三种 我们只…

Harbour.Space Scholarship Contest 2021-2022 E. Permutation Shift 思维 + 剪枝

传送门 文章目录题意&#xff1a;思路&#xff1a;题意&#xff1a; 给你一个初始排列[1,2,3,...,n][1,2,3,...,n][1,2,3,...,n]&#xff0c;你可以选择一个kkk&#xff0c;将这个排列循环右移kkk次&#xff0c;让后最多交换mmm次任意的两个位置之间的数&#xff0c;将其变成给…

VS Code 1.37 发布!多达数十个图标迎来全新设计

今天&#xff08;北京时间 2019 年 8 月 9 日&#xff09;&#xff0c;微软发布了 Visual Studio Code 1.37 版本。此版本主要更新的内容包括&#xff1a;Full product icon refresh - 多达数十个图标迎来全新的现代化设计Edit string arrays in the Settings UI - 在配置编辑器…

欧拉筛模板

欧拉筛模板 const int N 1e5 10;vector<int> prime; bool st[N];void init() {st[0] st[1] 1;for(int i 2; i < N; i) {for(int j 0; j < prime.size() && i * prime[j] < N; j) {st[i * prime[j]] 1;if(i % prime[j] 0) break;}} }

Serilog 自定义 Enricher 来增加记录的信息

Serilog 自定义 Enricher 来增加记录的信息IntroSerilog 是 .net 里面非常不错的记录日志的库&#xff0c;结构化日志记录&#xff0c;而且配置起来很方便&#xff0c;自定义扩展也很方便Serilog is a diagnostic logging library for .NET applications. It is easy to set up…

Harbour.Space Scholarship Contest 2021-2022 F. Pairwise Modulo 逆向思维 + 树状数组

传送门 文章目录题意思路&#xff1a;题意 给定一个不同数组成的序列aaa&#xff0c;定义pkp_kpk​为pk∑i1k∑j1kaimodajp_k\sum_{i1}^k\sum_{j1}^ka_i\bmod a_jpk​∑i1k​∑j1k​ai​modaj​&#xff0c;让你对于每个i∈[1,n]i\in [1,n]i∈[1,n]求出pip_ipi​。 2≤n≤2e5,…

miller_rabin 证明与实现

143. 质数判定__模板题链接 前置知识 费马小定理&#xff1a;ppp是质数&#xff0c;则对于任意的aaa&#xff0c;aaa与ppp互质&#xff0c;则有ap−1≡1(modp)a ^ {p - 1} \equiv 1 \pmod {p}ap−1≡1(modp)。 二次探测定理&#xff1a;如果ppp是一个质数&#xff0c;x2≡1(…

基于@media (prefers-color-scheme: [dark|light])的暗黑与亮色主题切换

今天有人反馈使用pdf.js的时候&#xff0c;发现pdf.js阅读器在自己的Mac Book电脑上显示的背景是暗黑色&#xff0c;而别人的电脑上却是白色&#xff1a; 根据这个问题&#xff0c;找到了pdf.js使用的view.css有段代码&#xff0c;类似这样&#xff1a; media (prefers-color-…