题意:

思路:From https://www.cnblogs.com/GavinZheng/p/11709153.html#4421510

写的1e9,int范围的

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. typedef unsigned int uint;
  5. typedef unsigned long long ull;
  6. typedef long double ld;
  7. typedef pair<int,int> PII;
  8. typedef pair<ll,ll> Pll;
  9. typedef vector<int> VI;
  10. typedef vector<PII> VII;
  11. typedef pair<ll,ll>P;
  12. #define N 500010
  13. #define M 6000010
  14. #define INF 1e9
  15. #define fi first
  16. #define se second
  17. #define MP make_pair
  18. #define pb push_back
  19. #define pi acos(-1)
  20. #define mem(a,b) memset(a,b,sizeof(a))
  21. #define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
  22. #define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
  23. #define lowbit(x) x&(-x)
  24. #define Rand (rand()*(1<<16)+rand())
  25. #define id(x) ((x)<=B?(x):m-n/(x)+1)
  26. #define ls p<<1
  27. #define rs p<<1|1
  28. #define fors(i) for(auto i:e[x]) if(i!=p)
  29.  
  30. const int MOD=1e8+,inv2=(MOD+)/;
  31. int p=1e4+;
  32. double eps=1e-;
  33. int dx[]={-,,,};
  34. int dy[]={,,-,};
  35.  
  36. ll dis[N];
  37. int head[N],vet[M],nxt[M],len[M],a[N],vis[N],mn,n,tot;
  38.  
  39. int read()
  40. {
  41. int v=,f=;
  42. char c=getchar();
  43. while(c<||<c) {if(c=='-') f=-; c=getchar();}
  44. while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
  45. return v*f;
  46. }
  47.  
  48. ll readll()
  49. {
  50. ll v=,f=;
  51. char c=getchar();
  52. while(c<||<c) {if(c=='-') f=-; c=getchar();}
  53. while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
  54. return v*f;
  55. }
  56.  
  57. void add(int a,int b,int c)
  58. {
  59. nxt[++tot]=head[a];
  60. vet[tot]=b;
  61. len[tot]=c;
  62. head[a]=tot;
  63. }
  64.  
  65. void build()
  66. {
  67. rep(i,,mn-) head[i]=;
  68. tot=;
  69. rep(i,,mn-)
  70. rep(j,,n) add(i,(i+a[j])%mn,a[j]);
  71. }
  72.  
  73. void dijk()
  74. {
  75. priority_queue<pair<ll,int> >q;
  76. mem(vis,);
  77. mem(dis,0x3f);
  78. q.push(MP(,)); dis[]=;
  79. while(!q.empty())
  80. {
  81. int u=q.top().se;
  82. q.pop();
  83. if(vis[u]) continue;
  84. vis[u]=;
  85. int e=head[u];
  86. while(e)
  87. {
  88. int v=vet[e];
  89. if(dis[u]+len[e]<dis[v])
  90. {
  91. dis[v]=dis[u]+len[e];
  92. q.push(MP(-dis[v],v));
  93. }
  94. e=nxt[e];
  95. }
  96. }
  97. }
  98.  
  99. int main()
  100. {
  101. n=read();
  102. ll L=readll(),R=readll();
  103. L--;
  104. mn=INF;
  105. int flag=;
  106. rep(i,,n)
  107. {
  108. a[i]=read();
  109. if(a[i])
  110. {
  111. mn=min(mn,a[i]);
  112. flag=;
  113. }
  114. }
  115. if(mn==INF)
  116. {
  117. printf("0\n");
  118. return ;
  119. }
  120. build();
  121. dijk();
  122. if(flag) dis[]=;
  123. else dis[]=mn;
  124. ll ans=;
  125. rep(i,,mn-)
  126. {
  127. if(R>=dis[i]) ans+=((R-dis[i])/mn)+;
  128. if(L>=dis[i]) ans-=((L-dis[i])/mn)+;
  129. }
  130. printf("%lld\n",ans);
  131. return ;
  132. }

【BZOJ2118】墨墨的等式(同余最短路)的更多相关文章

  1. BZOJ 2118 墨墨的等式 (同余最短路)

    题目大意:已知B的范围,求a1x1+a2x2+...+anxn==B存在非负正整数解的B的数量,N<=12,ai<=1e5,B<=1e12 同余最短路裸题 思想大概是这样的,我们选定 ...

  2. BZOJ2118: 墨墨的等式(同余类BFS)(数学转为图论题)

    2118: 墨墨的等式 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2944  Solved: 1206[Submit][Status][Discu ...

  3. BZOJ2118: 墨墨的等式(最短路构造/同余最短路)

    Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在 ...

  4. BZOJ2118 墨墨的等式[同余类最短路]

    声明:关于这题的$O(mn)$尚且未深入理解,虽然之前有跟这位神仙聊过做法但并没太懂.. $O(mn\log m)$同余最短路做法: 首先不妨抽出最小的$a_i=m$,那么剩余的$a$如果可以表示出$ ...

  5. Bzoj2118 墨墨的等式

    Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1488  Solved: 578 Description 墨墨突然对等式很感兴趣,他正在研究a1x1+ ...

  6. 【BZOJ2118】墨墨的等式(最短路)

    [BZOJ2118]墨墨的等式(最短路) 题面 BZOJ 洛谷 题解 和跳楼机那题是一样的. 只不过走的方式从\(3\)种变成了\(n\)种而已,其他的根本没有区别了. #include<ios ...

  7. 【BZOJ2118】墨墨的等式 最短路

    [BZOJ2118]墨墨的等式 Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值 ...

  8. BZOJ2118: 墨墨的等式(最短路 数论)

    题意 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在非负整数解. So ...

  9. 【同余最短路】【例题集合】洛谷P3403 跳楼机/P2371 墨墨的等式

    接触到的新内容,[同余最短路]. 代码很好写,但思路不好理解. 同余最短路,并不是用同余来跑最短路,而是通过同余来构造某些状态,从而达到优化时间空间复杂度的目的.往往这些状态就是最短路中的点,可以类比 ...

  10. BZOJ2118墨墨的等式[数论 最短路建模]

    2118: 墨墨的等式 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1317  Solved: 504[Submit][Status][Discus ...

随机推荐

  1. Spark架构角色及基本运行流程

    1. 集群角色 Application:基于spark的用户程序,包含了一个Driver program 和集群中多个Executor Driver Program:运行application的mai ...

  2. mysql分表规则(转)

    author:skatetime:2013/05/14 Mysql分表准则 在大量使用mysql时,数据量大.高访问时,为了提高性能需要分表处理,简介下mysql分表的标准,后续会继续补充 环境:业务 ...

  3. numpy中的快速的元素级数组函数

    numpy中的快速的元素级数组函数 一元(unary)ufunc 对于数组中的每一个元素,都将元素代入函数,将得到的结果放回到原来的位置 >>> import numpy as np ...

  4. 初识JavaScript(二)

    初识JavaScript(二) 我从上一篇<初识JavaScript(一)>知道和认识JavaScript的词法结构,也开始慢慢接触到了JavaScript的使用方法,是必须按照JavaS ...

  5. IDEA一些有用的功能

    使用 Type Info 如果你想要更多的关于符号的信息,例如从哪里或它的类型是什么, 快速文档可以很好的帮到您,您可以按下 Ctrl+Q 来调用它,然后你会看到一个包含这些细节的弹出窗口.如果您不需 ...

  6. .net 分布式锁

    原文 : 浅解.Net分布式锁的实现   序言 我晚上有在公司多呆会儿的习惯,所以很多晚上我都是最后一个离开公司的.当然也有一些同事,跟我一样喜欢在公司多搞会儿.这篇文章就要从,去年年末一个多搞会的晚 ...

  7. C#解决并发的设计思路

    解决并发的方案,应用场景,一个报名的方法,可是要限制报名的人数:一,如果是单机版,就是部署一个服务器站点的我们可以使用很经典的lock锁,或者queue队列,针对单机版二,如果是部署了集群的站点1&g ...

  8. python实现建造者模式

    python实现建造者模式 前言 无论是在现实世界中还是在软件系统中,都存在一些复杂的对象,它们拥有多个组成部分,如汽车,它包括车轮.方向盘.发送机等各种部件.而对于大多数用户而言,无须知道这些部件的 ...

  9. 3.SpringBoot整合Mybatis(一对多)

    前言: Mybatis一对多的处理关系: 一个人有好多本书,每本书的主人只有一个人.当我们查询某个人拥有的所有书籍时,就涉及到了一对多的映射关系. 一.添加数据表: CREATE TABLE `boo ...

  10. 重大更新:DeepFaceLab更新至2019.12.20

    本次更新增加SAEHD:lr_dropout参数,训练时可以打开或者禁用(默认禁用),每次换脸经过足够的训练后可以启用此选项以减少重复次数,从而获得额外的清晰度.还有一个比较有意义的更新是增加了图片元 ...