题解:P2662 牛场围栏

news/2025/9/25 23:17:34/文章来源:https://www.cnblogs.com/ztjp13/p/19112303

省流:同余最短路

本题是一道同余最短路算法的好题。接下来讲讲个人对这道题的理解。

首先,根据题意,我们知道,我们可以获得最多 \(m \times (m +1)\) 种木棍长度。我们设 \(t\) 为这个最大值,则木棍长度可表示为 \(a_1,a_2,…,a_t\)。设栅栏长度为 \(l\) ,若一个栅栏的长度是可表示的,则等同于 \(\exist k_1,k_2,…,k_t\in\Z^+,k_1a_1+k_2a_2+…+k_ta_t=l\)

根据数据范围可以看到,\(t\) 最大可以达到 \(9000000\),因此直接爆搜肯定不现实。但我们发现,单个木棍的长度最长只有 \(100\),我们又发现,当其中 \(t-1\) 个系数确定后,所有可表示的栅栏长度对剩下那个未被确定的系数对应的木棍长度取余的结果相同。因此,我们就可以使用同余的思想,选取长度最小的木棍来作为系数不确定的木棍,设其长度为 \(a_1\),同时设 \(d_i(i\in[0,a_1-1])\) 来表示当 \(l \bmod a_1=i\) 时,\(l\) 的最小值。此时,我们只需要建立从 $i(i\in[0,a_1-1]) $ 到 \((a_j+i)\bmod a_1(j\in[1,t])\),长度为 \(a_j\) 的有向边,并跑一遍 Dijkstra 求最短路即可。

在求出最短路后,若 \(d_i(i\in[0,a_1-1])\) 未被更新,就说明不存在最大值,输出 \(-1\)。否则,求出 \(ans=max\set{d_i-a_1(i\in[0,a_1-1])}\),输出即可。

上代码

#include<bits/stdc++.h>
using namespace std;#define int long longconst int N=3005;
const int M=6000005;int n,m;
int ans=-1,tot,maxn,minn=0x7ffffff;
int l[N],h[N];
int edge[M],ver[M],head[M],Next[M];
int d[M],vis[M];struct node{int id,step;bool operator <(const node b)const{return step>b.step;}
};priority_queue<node>q;inline int read(){int f=1,k=0;char c=getchar();while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}while(c>='0'&&c<='9'){k=k*10+c-'0';c=getchar();}return f*k;
}void add(int x,int y,int z){edge[++tot]=z; ver[tot]=y; Next[tot]=head[x]; head[x]=tot;
}void dij(){d[0]=0;q.push(node{0,0});while(!q.empty()){int x=q.top().id; q.pop();if(vis[x]) continue;		vis[x]=true;for(int i=head[x];i;i=Next[i]){int y=ver[i];int z=edge[i];if(d[y]>d[x]+z){d[y]=d[x]+z;q.push(node{y,d[y]});}}}
}signed main(){n=read(),m=read();for(int i=1;i<=n;i++) l[i]=read();for(int i=1;i<=n;i++){for(int j=l[i]-m;j<=l[i];j++) h[j]=1;maxn=max(l[i],maxn);minn=min(l[i]-m,minn); //求出木棍长度、最小值和最大值}for(int i=0;i<minn;i++){for(int j=minn;j<=maxn;j++)if(h[j]==1) add(i,(i+j)%minn,j); //加边d[i]=(1ull<<63)-1;}dij();for(int i=0;i<minn;i++){if(d[i]==(1ull<<63)-1){cout<<-1<<endl;return 0;}ans=max(ans,d[i]-minn);}cout<<ans<<endl;return 0;
}
```1. 

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

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

相关文章

day11 课程(学员管理系统案例)

day11 课程(学员管理系统案例)课程:https://www.bilibili.com/video/BV1o4411M71o?spm_id_from=333.788.videopod.episodes&p=204 11.1 函数加强简介------------------------------------------------ 执行后…

c语言初步学习

c语言初步学习学习c语言必须知道的代码 int main() {return 0; }在c语言里main函数是整个函数的入口点括号用来接收参数,括号为空则不接受外部数据符号皆为英文标点int是为了表明return后面的东西的类型

企业网站适合响应式嘛用ps可以做网站吗

分区的概念 分区实质上是根据特定的规则&#xff0c;将表划分为若干个独立的物理存储单位。以MySQL为例&#xff0c;表会被拆分为多个物理文件。而在OceanBase​​​​​​​中&#xff0c;每个分区则表现为一个物理副本组&#xff0c;每个分区默认都拥有三个副本。 分区表的优…

庐山网站建设大数据营销工具

要解决的问题 如何记录请求经过多个分布式服务的信息&#xff0c;以便分析问题所在&#xff1f;如何保证这些信息得到完整的追踪&#xff1f;如何尽可能不影响服务性能&#xff1f; 追踪 当用户请求到达前端A&#xff0c;将会发送rpc请求给中间层B、C&#xff1b;B可以立刻作…

Cloudflare安全验证过程全解析

本文详细解析了OpenBugBounty网站通过Cloudflare进行安全验证的完整流程,包括人机验证、连接安全检查、JavaScript启用要求等关键环节,揭示了现代Web安全防护的核心技术实现。验证流程分析 初始验证阶段 网站显示&qu…

2025.9.25总结 - A

今天上午是数据结构和篮球,收获颇多,强身健体。

天津企业模板建站在wordpress中设置mx记录

一般这种问题是因为某个文件/某个文件夹/某些文件夹过大导致整个项目超过1G了导致的 试过其他教程里的设置depth为1,也改过git的postBuffer,都不管用 最后还是靠克隆指定文件夹这种方式成功把项目拉下来 1. Git Bash 输入命令 git clone --filterblob:none --sparse 项目路径…

建设局查询网站哪做网站比较好

文章目录 地址下载启动 使用 地址 JMeter官网下载&#xff1a;https://jmeter.apache.org/download_jmeter.cgi 下载 最新款的jmeter需要java8的支持&#xff0c;请自行安装jdk8或以上的版本 根据系统不同系统下载zip或者是tgz格式的压缩包&#xff0c;并解压&#xff0c;博…

团购网站建设公司做邮轮上哪个网站订票好

2023-2024华为ICT大赛 计算赛道 广东省 省赛 初赛 高职组 部分赛题 分析【2023.11.18】 文章目录 单选题tpcds模式中存在表customer&#xff0c;不能成功删除tpcds模式是&#xff08; &#xff09;以下哪个函数将圆转换成矩形&#xff08; &#xff09;下列哪个选项表示依赖该D…

做宣传图片的网站互联网保险乱象

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

US$128 OBD II Adapter Plus OBD Cable Works with CKM100 and DIGIMASTER III for Key Programming

OBD II Adapter Plus OBD Cable Works with CKM100 and DIGIMASTER III for Key ProgrammingNote: Connect the adapter cable with device firstly! Then connect the cable with car OBD socket.Special Function: S…

jmeter函数

__Random产生一个随机数 #${__Random(起始,终止,变量名)} ${__Random(0,10, num)} 引用变量:${num}__RandomDate指定时间段产生一个日期 #${__RandomDate(时间指定格式(默认yyyy mm dd),起始时间,终止时间,语言…

Python建立ETF网格自动化交易集成动量阈值判断

Python建立ETF网格自动化交易集成动量阈值判断pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &q…

一文读懂Zookeeper与Kafka:从原理到实战部署 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

济南网站中企动力彩票网站开发周期

1. 二进制转十进制 按照数据类型分为三种&#xff1a;无符号的二进制整数&#xff0c;有符号的二进制整数和小数二进制数。 1.1 无符号的二进制整数 计算技巧&#xff1a; 从二进制数的右边第一位起&#xff0c;从右往左&#xff0c;先用二进制位置上的数乘以2的相应位数的幂&…

东莞石龙网站建设wordpress最新版怎么变成英文

在游戏中经常会有需要玩家输入一些内容的功能&#xff0c;例如聊天&#xff0c;命名等&#xff0c;这款游戏只有在存档时辉用到命名功能&#xff0c;所以这个过滤也只是一个实验性的功能&#xff0c;我们将使用AC自动机来实现&#xff0c;这是在我们把“csdn”这个词设置为屏蔽…

微网站页面自助建站系统官方版

目录深搜200. 岛屿数量695. 岛屿的最大面积130. 被围绕的区域547. 省份数量417. 太平洋大西洋水流问题回溯广搜111. 二叉树的最小深度752. 打开转盘锁深搜与广搜结合934. 最短的桥深搜 深搜DFS&#xff0c;在搜索到一个新节点时&#xff0c;立即对该新节点进行遍历&#xff0c…

汕头市企业网站建设品牌沈阳公司网站

直接上代码&#xff1a; #初始化用户信息 import randomprint("本比赛参赛英雄为&#xff1a;1老夫子 2典韦 3吕布") name int(input("请您选择出场英雄&#xff1a;"))if name 1:print("您本次选择的英雄为&#xff1a;老夫子——我会让你明白什么…

Java 生态监控体系实战:Prometheus+Grafana+SkyWalking 整合全指南(三) - 教程

Java 生态监控体系实战:Prometheus+Grafana+SkyWalking 整合全指南(三) - 教程2025-09-25 22:47 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overf…

【网络编程】UDP 编程实战:从套接字到聊天室多场景计划构建

【网络编程】UDP 编程实战:从套接字到聊天室多场景计划构建pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…