当前位置: 首页 > wzjs >正文

站长工具端口检测谷歌seo查询

站长工具端口检测,谷歌seo查询,flash网站php源码,做专业的热转印材料门户网站题目传送门: P2371 [国家集训队] 墨墨的等式 - 洛谷 (luogu.com.cn) 前言: 这道题主要求我们计算在区间 中 能使等式 存在非负整数解,总体来难度的话还是挺大的,下面为大家详细讲解解题思路。 本题狠心思路&#xff1…

题目传送门:

P2371 [国家集训队] 墨墨的等式 - 洛谷 (luogu.com.cn)

前言:

这道题主要求我们计算在区间  [l,r]  中 b  能使等式  {\textstyle \sum_{i=1}^{n}}a_{i} x_{i}=b  存在非负整数解,总体来难度的话还是挺大的,下面为大家详细讲解解题思路。

本题狠心思路:

        我们采用同余最短路的方法来解决这个问题。同余最短路的狠心思想是利用余数的心智,将一个复杂的线性组合存在性问题转化为图论中的最短路问题,通过构件图并计算最短路径来确定满足条件的 b  的个数。

#具体步骤:

        1、选择模数:

                给定的  n  个系数  a_{1},a_{2}\cdots ,a_{n}  中选择一个非零的  a_{i}  作为模数 mod  ,通常选择最小的非零  a_{i}  ,作为模数可以使后续构建的图的节点数相对较少,减少 计算量。

        2、构建图:

                将所有可能的余数 0 到  mod-1  看做图中的节点。对于每个  a_{j} (1\le j\le n)  ,从节点 k 向节点  (k+a_{j})mod  mod  连着一条长度为 a_{j}  的边。

        3、求解最短路:

                        我们使用 Dijkstra 等最短路算法,以 0 为起点,计算到每个节点  i  的最短路路径的长度  dis[i]  。这里的  dis[i]  表示能得到余数为  i  的最小的  b  值。具体来说,从起点 0 开始,不断更新到其他节点的最短距离,当遍历完所有可能的边后,就能得到从 0 到每个余数节点的最短路径长度,当遍历完所有可能的边后后,就能得到从 0 到每个余数节点的最短路径长度。

        4、统计答案:

                对于给定的区间  [l,r]  ,遍历所有余数 i  (0\le i < mod)   。对于每个余数  i  ,能的到余数为  i  的最小的  b  的值是  dis[i]  ,那么满足   dis[i]+k \times mod \in [l,r]   的非负整数  k

的个数就是该余数对应的满足条件  b  的个数。我们可以通过计算满足不等式    l \le dis[i]+k \times mod \le r   的  k  的范围来得到这个个数。具体计算的时候,我们要先计算  k  的下线     left = max(0,\left \lceil \frac{l-dis[i]}{mod} \right \rceil )     和上限   right=\left \lfloor \frac{r-dis[i]}{mod} \right \rfloor   ,则满足条件的  k  的个数为   max(0,right - left +1)   ,将所有余数对应的个数累脚起来就是最答案。

##示例解释:

        假设我们输入 n=2,t=5,r=10,a_{1}=3,a_{2}=5  。

                选择  mod=3  作为模数。

                构建图:

                        从节点 0 向节点  (0,3)mod3=0  连长度为 3 的边,向节点   (0,5)mod3=2  连长度为 5 的边。

                        从节点 1 向节点 (1+3)mod3=1  连长度为 3 的边,向节点   (1+5)mod3=0   连长度 5 的边。

                        从节点 2 向节点  (2+3)mo3=2   连长度为 3 的边,向节点  (2+5)mod3=1   连长度为 5 的边。

        使用 Dijkstra 算法计算最短路,得到    dis[0]=0,ds[1]=5,dis[2]=3  。

        统计答案:

                对于  i=0  ;

                  计算   left=max(0,\left \lceil \frac{5-0}{3} \right \rceil )=2,right=\left \lfloor \frac{10-0}{3} \right \rfloor   ,满足条件的 k 的有 3 - 2 + 1 = 2 个,对应的 b 为 2 * 3 = 6 和 3 * 3 = 9. 。

                对于 i=1  ;   

                        计算  left=max(0,\left \lceil \frac{5-3}{3} \right \rceil ),right=\left \lfloor \frac{10-5}{3} \right \rfloor =1     ,满足条件的 k 有 1 - 0 + 1 = 2个,对应的 b 为 5 + 0 * 3 = 5 和 5 + 1 * 3 = 8.

                对于  i=2  ;

                        计算  left = max()0,\left \lceil \frac{5-3}{3} \right \rceil )=1,right = \left \lfloor \frac{10-3}{3} \right \rfloor =2    ,满足条件的 k 有 2 - 1 + 1 =2 个,但其中 b = 3 + 1 * 3 =6 和 b = 3 + 2 * 3 = 9 与前面重复,只新增 1 个不重复的 b 。

                最终满足条件的 b 的个数为 5 。

###复杂度:

        1、时间复杂度:

                O(mod \times n \times log(mod))   。

        2、空间复杂度:

                O(mod \times n) 。

####代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;const int MAX = 15;
const int MAN = 5e5 + 5;struct Node {LL dis;int u;Node(LL _dis, int _u) : dis(_dis), u(_u) {}bool operator>(const Node& other) const {return dis > other.dis;}
};int n;
LL l, r;
int a[MAX];
LL dis[MAN];// 计算区间 [l, r] 内满足条件的 b 的数量
LL c(LL l, LL r, LL base, LL mod) {if (base > r) return 0;LL left = max(0LL, (l - base + mod - 1) / mod);LL right = (r - base) / mod;return max(0LL, right - left + 1);
}int main() {cin >> n >> l >> r;for (int i = 0; i < n; ++i) {cin >> a[i];}// 找到最小的非零 a[i] 作为模数int mod = 0;for (int i = 0; i < n; ++i) {if (a[i] > 0 && (mod == 0 || a[i] < mod)) {mod = a[i];}}if (mod == 0) {cout << (l == 0 && r == 0 ? 1 : 0) << endl;return 0;}// 初始化距离数组fill(dis, dis + mod, LLONG_MAX);dis[0] = 0;// 使用优先队列进行 Dijkstra 算法priority_queue<Node, vector<Node>, greater<Node>> pq;pq.push(Node(0, 0));while (!pq.empty()) {Node cur = pq.top();pq.pop();LL d = cur.dis;int u = cur.u;if (d > dis[u]) continue;for (int i = 0; i < n; ++i) {if (a[i] == 0) continue;int v = (u + a[i]) % mod;LL N = d + a[i];if (N < dis[v]) {dis[v] = N;pq.push(Node(N, v));}}}// 统计满足条件的 b 的数量LL ans = 0;for (int i = 0; i < mod; ++i) {ans += c(l, r, dis[i], mod);}cout << ans << endl;return 0;
}

                        

http://www.dtcms.com/wzjs/299776.html

相关文章:

  • 建网站的大公司百度推广热线电话
  • 专门做辅助的扎金花网站怎么做一个自己的网页
  • 电子商务网站开发难点在线建站平台
  • 如何快速备案网站长沙seo网站排名
  • 绑定ip地址的网站广州seo技术外包公司
  • 编辑不了的wordpressaso优化什么意思是
  • 公司建立网站流程seo广州工作好吗
  • 制作网站的公司注册资本要多少百度关键词购买
  • 棠下手机网站建设建设企业网站多少钱
  • 上海 企矩 网站建设外贸怎么建立自己的网站
  • 上海网站建设 知名做企业软文怎么写
  • 分析网站建设发展措施深圳百度公司地址在哪里
  • 竞争对手网站营销软件代理推广
  • 唯品会网站页面设计关键词优化seo多少钱一年
  • 2016国外网站设计欣赏知乎推广公司
  • 注册公司邮箱潍坊网站建设seo
  • 中国做网站知名的公司网络营销策略的内容
  • 短视频seo排名加盟合肥seo建站
  • 渭南网站建设服务策划网络营销方案
  • 使用java做后台网站关键词排名优化公司哪家强
  • 郑州那个公司做网站好app软件下载站seo教程
  • 金华建设局政务网站流程优化
  • 建网站英语网店推广营销方案
  • ps做网站宽度seo和竞价排名的区别
  • 手机网站制作合同镇江网站建设方案
  • 想学做网站学什么教程广州seo成功案例
  • 医院网站建设联系方式b2b平台有哪几个
  • 怎么在百度做公司网站百度手机seo
  • 门户网站是什么百度集团
  • webview做网站app百度网盘网页版登录首页