【图论经典题目讲解】洛谷 P2371 墨墨的等式

P2371 墨墨的等式

D e s c r i p t i o n \mathrm{Description} Description

求解有多少个 b ∈ [ l , r ] b\in [l,r] b[l,r] 满足 ∑ i = 1 n a i x i = b \sum\limits_{i=1}^n a_ix_i=b i=1naixi=b 存在非负整数解( x i x_i xi 为变量, a a a 数组给定)。

S o l u t i o n \mathrm{Solution} Solution

b b b 一定可以表示为 q + k v q+kv q+kv 的形式,其中 q ∈ [ 0 , v ) q\in [0,v) q[0,v) 表示余数, k ∈ Z k\in \mathbb{Z} kZ

故,思路可以转化为选择合适的 v v v,对于枚举余数 q ∈ 0 ∼ v − 1 q\in 0\sim v - 1 q0v1,求解通过 ∑ i = 1 n a i x i = b \sum\limits_{i=1}^n a_ix_i=b i=1naixi=b,所能凑出的最小的 b b b,使得 b b b v v v q q q

那么,为了能够不重不漏的计算出所有的 b b b v v v 应取 min ⁡ ( a i ) \min(a_i) min(ai),即 a a a 数组中的最小值,这样只要能够由题目中的等式凑出的 b b b,就必定能由 q + k v q+kv q+kv 的形式。(可以感性理解)

下面就是如何能够求解最小的余数为 q q q 出的 b b b q ∈ [ 0 , v − 1 ] q\in[0,v-1] q[0,v1]),这就运用到了 同余最短路

将余数 i i i 连一条向 ( i + a j ) m o d v (i+a_j)\bmod v (i+aj)modv 长度为 a j a_j aj 的边,对于每一个 j ∈ [ 1 , n ] j\in [1,n] j[1,n]。这表示从 i i i 这个余数加入 a j a_j aj 后,将会变为的一个新的余数。在这个图中求从 0 0 0 号点到所有点的最短路后,对于 i i i 号点的含义就是凑出余数为 i i i 的最小的数。

最后,通过前缀和的思想可以得到 l ∼ r l\sim r lr b b b 的个数为 0 ∼ r 0\sim r 0r b b b 的个数减去 0 ∼ l − 1 0\sim l-1 0l1 b b b 的个数。对于每一个 i i i,设凑数余数为 i i i 的最小的数为 b ′ b' b,则若当前最高限制为 x x x,则 b b b 的个数为 ⌊ x − b ′ v ⌋ + 1 \lfloor\frac{x-b'}{v}\rfloor+1 vxb+1

C o d e Code Code

#include <bits/stdc++.h>
#define int long longusing namespace std;typedef pair<int, int> PII;
typedef long long LL;const int SIZE = 5e6 + 10;int N, L, R;
int A[20];
int h[SIZE], e[SIZE], ne[SIZE], w[SIZE], idx;
int Dist[SIZE], Vis[SIZE];void add(int a, int b, int c)
{e[idx] = b, ne[idx] = h[a], w[idx] = c, h[a] = idx ++;
}void Dijkstra(int Start)
{memset(Dist, 0x3f, sizeof Dist);memset(Vis, 0, sizeof Vis);priority_queue<PII, vector<PII>, greater<PII>> Heap;Heap.push({0, Start}), Dist[Start] = 0;while (Heap.size()){auto Tmp = Heap.top();Heap.pop();int u = Tmp.second;if (Vis[u]) continue;Vis[u] = 1;for (int i = h[u]; ~i; i = ne[i]){int j = e[i];if (Dist[j] > Dist[u] + w[i]){Dist[j] = Dist[u] + w[i];Heap.push({Dist[j], j});}}}
}signed main()
{cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);memset(h, -1, sizeof h);cin >> N >> L >> R;int Min = 1e18;for (int i = 1; i <= N; i ++){cin >> A[i];if (A[i]) Min = min(Min, A[i]);}for (int i = 0; i < Min; i ++)for (int j = 1; j <= N; j ++)if (A[j] != Min && A[j])add(i, (i + A[j]) % Min, A[j]);Dijkstra(0);int Tot1 = 0, Tot2 = 0;for (int i = 0; i < Min; i ++)if (Dist[i] <= R)Tot1 += (R - Dist[i]) / Min + 1;for (int i = 0; i < Min; i ++)if (Dist[i] < L)Tot2 += (L - 1 - Dist[i]) / Min + 1;cout << Tot1 - Tot2 << endl;return 0;
}

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

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

相关文章

数据结构-哈夫曼树

介绍 哈夫曼树&#xff0c;指带权路径长度最短的二叉树&#xff0c;通常用于数据压缩中 什么是带权路径长度&#xff1f; 假设有一个结点&#xff0c;我们为它赋值&#xff0c;这个值我们称为权值&#xff0c;那么从根结点到它所在位置&#xff0c;所经历的路径&#xff0c;…

无穷绕八双纽线

目录&#xff09; 前言双纽线双纽线工程化双纽线应用参考文献 前言 今天是初八&#xff0c;在中国某些地方初八有拜财神的习俗&#xff0c;“八”谐音“发”&#xff0c;等同于恭喜发财的“发”&#xff0c;寓意着在新的一年里红红火火发大财&#xff0c;三叔首先祝福各位读者…

oracle和mysql语句有哪些异同点?

Oracle和MySQL是两个流行的关系型数据库管理系统&#xff0c;它们都有SQL&#xff08;结构化查询语言&#xff09;作为主要的查询语言。尽管它们共享许多基本的SQL功能&#xff0c;但它们之间也存在一些关键的差异。以下是一些Oracle和MySQL语句的异同点&#xff1a; 数据类型…

C语言:函数指针

前言&#xff1a; 当谈到C语言的高级特性时&#xff0c;函数指针是一个非常重要的概念。函数指针允许我们在程序中动态地传递和调用函数&#xff0c;这在很多情况下都非常有用。本篇博客将详细讲解C语言函数指针的知识&#xff0c;并带上一些代码示例来帮助读者理解。 目录 什么…

如何使用HTTP隧道在Linux环境下构建内网穿透解决方案

你是否曾经遇到过这样的尴尬场景&#xff1a;身处内网环境&#xff0c;却想要让外部世界的朋友访问你的某个服务&#xff0c;却发现那堵墙——防火墙&#xff0c;如同一座不可逾越的山峰&#xff0c;挡住了你的去路&#xff1f;别担心&#xff0c;今天我们就来聊聊如何在Linux环…

Python:变量与数据类型

目录 一、变量 1.1 强数据类型与弱数据类型 1.2 全局函数 1.3 变量的命名规范 二、数据类型 2.1 基本数据类型 2.2 复合数据类型&#xff08;引用数据类型&#xff09; 三、数据类型转换 一、变量 变量&#xff1a;顾名思义&#xff0c;变化的量。在python中代指运行时…

html标签及基础语法 大合集

01-标签语法标签结构 HTML&#xff08;Hypertext Markup Language&#xff09;是网页的基础语言之一&#xff0c;它通过使用标签&#xff08;tag&#xff09;来描述网页的结构和内容。标签是由尖括号包围的关键词&#xff0c;通常成对出现&#xff0c;其中包括一个开始标签和一…

【大厂AI课学习笔记】【2.2机器学习开发任务实例】(6)特征分析

今天来学习特征分析。 通过图分析每个特征与结果的对应关系。 例如上方&#xff0c;使用散点图&#xff0c;将各个特征和价格的关系&#xff0c;绘制出来&#xff0c;观察是否具有较大的相关性。 散点图可以帮助找出现有特征中&#xff0c;与价格的关联度&#xff08;正数正相…

蓝桥杯刷题--python-7

0幸运数字 - 蓝桥云课 (lanqiao.cn) count 0def add_sum(num):nums []for i in num:nums.append(int(i))return sum(nums)for i in range(1, 999999):if count < 2023:bin_num bin(i)[2:]oct_num oct(i)[2:]hex_num hex(i)[2:]tm []for j in hex_num:tm.append(int(j,…

RAG和Embedding

搭建过程&#xff1a; &#xff08;1&#xff09;文档加载&#xff0c;并按一定条件切割成片段 &#xff08;2&#xff09;将切割的文本片段灌入检索引擎 &#xff08;3&#xff09;封装检索接口 &#xff08;4&#xff09;构建调用流程&#xff1a; Query -> 检索 ->…

Vue3+vite搭建基础架构(6)--- 使用vue-router

Vue3vite搭建基础架构&#xff08;6&#xff09;--- 使用vue-router 说明官方文档安装vue-router使用vue-router测试vue-router 说明 这里记录下自己在Vue3vite的项目使用vue-router的过程&#xff0c;不使用ts语法&#xff0c;方便以后直接使用。这里承接自己的博客Vue3vite搭…

阿里云上关于EDAS发布方式

1. 描述蓝绿部署和灰度发布的区别以及适用场景。 蓝绿部署和灰度发布是两种常见的软件发布策略&#xff0c;它们各有特点并适用于不同的场景。 蓝绿部署的特点&#xff1a; 目的&#xff1a;蓝绿部署的主要目的是减少发布时的中断时间&#xff0c;并且能够在新版本出现问题时…

用MQL语言实现报价导出为JSON文件

文章目录 一、MQL语言导出报价为JSON文件意义二、MQL语言导出报价为JSON的代码实现设置输入变量加载历史数据报价写入JSON文件添加数据到json文件脚本主程序 一、MQL语言导出报价为JSON文件意义 数据存储&#xff1a;将报价导出为JSON文件可以将数据以结构化的方式存储在文件中…

JavaScript(JS)与Java的区别与联系

区别&#xff1a; 1.JS是前端语言&#xff0c;Java是后端语言 2.JS是在浏览器上运行的&#xff0c;而Java是要在Java虚拟机&#xff08;JVM&#xff09;上运行 3.JS是弱类型语言&#xff08;不需要声明变量类型&#xff09;&#xff0c;而Java是强类型语言&#xff08;需要声…

sqlserver 事务

下面是 SQL Server 中使用事务的示例 SQL 代码&#xff1a; BEGIN TRANSACTION;UPDATE 表名 SET 列名 新值 WHERE 条件;INSERT INTO 表名 (列1, 列2, 列3) VALUES (值1, 值2, 值3);DELETE FROM 表名 WHERE 条件;COMMIT TRANSACTION;在上面的示例中&#xff0c;通过 BEGIN TRA…

[ linux网络 ] 网关服务器搭建,综合应用SNAT、DNAT转换,dhcp分配、dns分离解析,nfs网络共享以及ssh免密登录

实验准备工作&#xff1a; 网关服务器安装&#xff1a;dhcp bind &#xff08;yum install -y dhcp bind bind-utlis&#xff09; server1安装&#xff1a;httpd (yum install -y httpd) 没有网络就搭建本地yum仓库或者配置网卡使其能够上网。 ( 1&#xff09;网关服务器…

不同域名的页面进行通信,通过iframe和postMessge进行消息通信

不同域名的页面&#xff0c;通过iframe和postMessge进行消息通信 前言 浏览器不同标签页之间进行消息通信&#xff0c;尤其是当这些标签页位于不同域名时&#xff0c;通常需要使用一些特定的技术或协议来实现。以下是几种可能的方法&#xff1a; WebSocket&#xff1a;WebSo…

源聚达科技:抖音店铺2024年卖什么好

随着时代的变迁和科技的进步&#xff0c;消费者的购物习惯与偏好也在不断演变。展望2024年&#xff0c;抖音作为新兴的电商平台&#xff0c;其店铺销售策略需紧跟潮流&#xff0c;才能在激烈的市场竞争中脱颖而出。那么&#xff0c;哪些产品将成为抖音店铺的新宠呢? 首当其冲&…

STM32CubeMax(使用7步)新建工程

现在有时间学习一下STM32用CubeMX新建一个工程的步骤&#xff0c;特此记录一下&#xff1a; 第一步打开STM32CubeMax 第二步搜索芯片型号&#xff1a; 第三步配置时钟&#xff1a; 第四步点选配置时钟源&#xff1a; 第五步填写工程相关的名称路径信息&#xff1a; 第六步选择…

基于SpringBoot3从零配置SpringDoc

基于SpringBoot3从零配置SpringDoc 一、SpringFox二、SpringDoc三、Open API 规范四、SpringBoot3配置Knife4j1.官方参考文档2.添加依赖3.添加配置项4.设置文档首页5.编写控制器6.文档展示 一、SpringFox github SpringFox 已经停止更新了。SpringFox 对 SpringBoot3.0 不适配…