题目链接

题意可以看做,用\(a_1,a_2,...,a_n\),能组成多少个\([L,R]\)中的数。

(40分就是个完全背包)

首先如果\(k*a_i+x\)可以组成,那么\((k+1)*a_i+x\)自然也可以组成(\(k\geq 0,0\leq x<a_i\))。

即我们选取一个\(a_i\)做模数,若\(d\equiv x(mod\ a_i)\),则\(d+a_i\equiv x(mod\ a_i)\),那么对于当前余数\(x\)我们可以算出\([0,R]\)中有多少个数模\(a_i\)为\(x\)(只能由\(d\)每次加\(a_i\))。对于所有余数算一次就能得到答案。

另外这个\(d\)需要是满足模\(a_i\)为\(x\)的最小的数(用\(n\)个数组合得到)。考虑如何对每个余数求这个\(d\)。

因为每次是枚举\(n\)个数转移(加上再取模),且状态可以用数组存,要求最小,联想到最短路。

\(dis[x]\)表示满足模\(a_i\)为\(x\)的能组成的最小的数。那么余数为\(0\)的最小的数自然是\(0\),即\(dis[0]=0\)。然后SPFA或Dijkstra。

至于\(a_i\),取最小的吧。这样图中的点数自然最少。(当然取哪个是任意的,因为最后统计答案时的\(a_i\)也是这个\(a_i\))

如果物品有下限限制,可以把边界先减掉,再这么求。

//9480kb	1792ms(慢啊→_→)
#include <queue>
#include <cstdio>
#include <cctype>
#include <cstring>
#include <algorithm>
#define gc() getchar()
#define mp std::make_pair
#define pr std::pair<LL,int>
typedef long long LL;
const int N=5e5+5; int n,mod,A[N];
LL dis[N];
std::priority_queue<pr> q; inline LL read()
{
LL now=0;register char c=gc();
for(;!isdigit(c);c=gc());
for(;isdigit(c);now=now*10+c-'0',c=gc());
return now;
}
void Dijkstra()
{
static bool vis[N]; memset(dis,0x3f,sizeof dis);
dis[0]=0, q.push(mp(0,0));
while(!q.empty())
{
int x=q.top().second; q.pop();
if(vis[x]) continue;
vis[x]=1;
for(int i=1,v; i<=n; ++i)
if(dis[v=(x+A[i])%mod]>dis[x]+A[i])
q.push(mp(-(dis[v]=dis[x]+A[i]),v));
}
}
inline LL Calc(LL x)
{
LL ans=0;
for(int i=0; i<mod; ++i)
if(dis[i]<=x) ans+=(x-dis[i])/mod+1;//还有个dis[i]
return ans;
} int main()
{
n=read(); LL L=read(),R=read();
int cnt=0; mod=N;
for(int i=1; i<=n; ++i)
if(!(A[++cnt]=read())) --cnt;//忽略0
else mod=std::min(mod,A[cnt]);
n=cnt, Dijkstra();
printf("%lld\n",Calc(R)-Calc(L-1)); return 0;
}

BZOJ.2118.墨墨的等式(思路 最短路Dijkstra 按余数分类)的更多相关文章

  1. 【BZOJ 2118】 墨墨的等式(Dijkstra)

    BZOJ2118 墨墨的等式 题链:http://www.lydsy.com/JudgeOnline/problem.php?id=2118 Description 墨墨突然对等式很感兴趣,他正在研究 ...

  2. 【BZOJ 2118】墨墨的等式

    http://www.lydsy.com/JudgeOnline/problem.php?id=2118 最短路就是为了找到最小的$x$满足$x=k×a_{min}+d,0≤d<a_{min}$ ...

  3. 牛客国庆集训派对Day1.B.Attack on Titan(思路 最短路Dijkstra)

    题目链接 \(Description\) 给定\(n,m,C\)及大小为\((n+1)(m+1)\)的矩阵\(c[i][j]\).平面上有\((n+1)(m+1)\)个点,从\((0,0)\)编号到\ ...

  4. bzoj 2118 墨墨的等式 - 图论最短路建模

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

  5. 【BZOJ 2118】 2118: 墨墨的等式 (最短路)

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

  6. 数论+spfa算法 bzoj 2118 墨墨的等式

    2118: 墨墨的等式 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 1283  Solved: 496 Description 墨墨突然对等式很感兴 ...

  7. [图论训练]BZOJ 2118: 墨墨的等式 【最短路】

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

  8. bzoj 2118: 墨墨的等式

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

  9. bzoj 2118: 墨墨的等式 spfa

    题目: 墨墨突然对等式很感兴趣,他正在研究\(a_1x_1+a_2y_2+ ... +a_nx_n=B\)存在非负整数解的条件,他要求你编写一个程序,给定\(N,\{a_n\}\)以及\(B\)的取值 ...

随机推荐

  1. Modelsim SE 破解教程

    第一步:打开我们提供的破解工具包. 第二步:拷贝crack.bat和MentorKG.exe到"C:\modeltech64_10.2c\win64"路径下,如果你的电脑为32位, ...

  2. Python 优雅获取本机 IP 方法【转】

    转自:https://www.cnblogs.com/lfxiao/p/9672975.html 见过很多获取服务器本地IP的代码,个人觉得都不是很好,例如以下这些 不推荐:靠猜测去获取本地IP方法 ...

  3. HTML学习笔记08-表格

    HTML表格 表格由<table>标签来定义,表格的行由<tr>标签来定义,表格的列由<td>标签来定义 <!DOCTYPE html> <htm ...

  4. 开发使用tomcat生产使用weblogic造成jar包冲突如何解决?

    问题描述开发时新增了jar包,当将增量包部署到测试服务器后启动应用出现如下错误提示:java.lang.LinkageError: loader constraint violation: loade ...

  5. bzoj 1803: Spoj1487 Query on a tree III(主席树)

    题意 你被给定一棵带点权的n个点的有根数,点从1到n编号. 定义查询 query(x,k): 寻找以x为根的k大点的编号(从小到大排序第k个点) 假设没有两个相同的点权. 输入格式: 第一行为整数n, ...

  6. fastjson序列化排序问题

    fastjson序列化,默认是用字母排序, 那么怎么来实现按照自己定义的顺序输出,想要的json串呢? 直接上代码: import com.alibaba.fastjson.annotation.JS ...

  7. 最近关于mysql的造型,binlog使用,以及阿里云上线数据处理错误导致被处罚的思考

    因团队中成员,上线代码时,不小心将数据表中吃掉物理的数据清空,导致被单位处罚,痛定思痛,我们应该如何上线,还需要准备哪些技能? 1.上线时,必须关闭服务,不能一边上线,一边让用户可以继续操作,一边产生 ...

  8. Xshell不能使用退格、删除键进行删除的解决方法

    xshell在输入命令时,如果敲错字母了的时候,想通过按退格键删除敲错的字母,却在屏幕显示出了“^H”,退格不行,再按删除键,却显示出“^[[3~”,怎么着就是删除不了输错的字母. 修改办法:文件-- ...

  9. SpringMVC集成springfox-swagger2自动生成接口文档

    本节内容: 什么是Swaggger Springfox与Swagger的关系 SpringMVC集成springfox-swagger2 一.什么是Swaggger Swagger是一个流行的API开 ...

  10. DNS java

    https://www.cnblogs.com/549294286/p/5307316.html https://www.cnblogs.com/crazyacking/p/5672032.html