Description

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

Input

输入的第一行包含3个正整数,分别表示N、BMin、BMax分别表示数列的长度、B的下界、B的上界。输入的第二行包含N个整数,即数列{an}的值。

Output

输出一个整数,表示有多少b可以使等式存在非负整数解。

Sample Input

2 5 10
3 5

Sample Output

5

HINT

对于100%的数据,N≤12,0≤ai≤5*10^5,1≤BMin≤BMax≤10^12。

思路:看起来是数论的题目,关键是对于一个ai 如果发现x是可行解,那么显然x+ai,x+2*ai,x+3*ai.....一直到BMax都是可行的恩 这是连续的 所以对于0 1 2 3 4 5 6 ...ai-1 那么我们分别记录它的最小的x使得x是个可行解,并且x mod ai == 0 1 2 3 ...ai-1 就可以不重不漏的找到所有解了

至于怎么找,把0 1 2 3 4 5 6 ...ai-1 看成ai个点,向每个后面的点aj的边,由于非负 显然最短路就是我们寻找的x

#include<cstdio>
#include<cstring>
#include<iostream>
#include<queue>
#include<algorithm>
#define maxn 500009
using namespace std;
typedef pair<long long,int> pii;
priority_queue<pii, vector<pii>, greater<pii> >q;
int head[maxn],point[],nex[],now,a[maxn];
int value[];
long long dist[maxn];
long long read()
{
long long x=,f=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return x*f;
}
void add(int x,int y,int v)
{
nex[++now] = head[x];
head[x] = now;
point[now] = y;
value[now] = v;
}
void dijkstra(int s,int n)
{
for(int i=;i<=n;i++)dist[i]=(long long)1e60;
dist[s] = ;
int visit[maxn]={};
q.push(make_pair(,s));
while(!q.empty())
{
int u = q.top().second;
q.pop();
if(visit[u])continue;
visit[u] = ;
for(int i = head[u];i;i=nex[i])
{
int k = point[i];
if(dist[u]+value[i]<dist[k])
{
dist[k] = dist[u] + value[i];
q.push(make_pair(dist[k],k));
}
}
}
}
int main()
{
long long n=read(),bmin=read(),bmax=read(),ans=;
long long amin,aj=;
a[] = read();
amin = a[];
for(int i=;i<=n;i++)
{
a[i] = read();
if(a[i]<amin)
{
amin=a[i];
aj=i;
}
}
//printf("amin=%d\n",amin);
for(int i=;i<amin;i++)
{
for(int j=;j<=n;j++)if(j!=aj)
{
add(i,(i+a[j])%amin,a[j]);
}
}
dijkstra(,amin);
//for(int i=0;i<amin;i++)printf("%d : %lld\n",i,dist[i]);
for(int i=;i<amin;i++)if(dist[i]<=bmax)
{
long long u = max(dist[i],(long long)bmin)-;
long long l = u / amin, r = bmax / amin;
if(bmax % amin >= i)r++;
if(u % amin >= i)l++;
ans += r - l;
}
printf("%lld\n",ans);
return ;
}

[图论训练]BZOJ 2118: 墨墨的等式 【最短路】的更多相关文章

  1. [图论训练]BZOJ 3245: 最快路线【最短路】

    Description 精 明的小R每每开车出行总是喜欢走最快路线,而不是最短路线.很明显,每条道路的限速是小R需要考虑的关键问题.不过有一些限速标志丢失了,于是小R将不知 道能开多快.不过有一个合理 ...

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

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

  3. 【BZOJ 2118】墨墨的等式

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

  4. [图论训练]BZOJ 1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路【floyd】

    Description     农夫约翰正驾驶一条小艇在牛勒比海上航行.     海上有N(1≤N≤100)个岛屿,用1到N编号.约翰从1号小岛出发,最后到达N号小岛.一 张藏宝图上说,如果他的路程上 ...

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

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

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

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

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

    2118: 墨墨的等式 Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及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. Android(java)学习笔记118:BroadcastReceiver之 外拨电话的广播接收者

    1. 外拨电话的广播接收者: 首先我们示例工程一览表如下: (2)首先我们还是买一个收音机,定义一个OutCallReceiver继承自BroadcastReceiver,onReceive()方法中 ...

  2. 爬虫3_python2

    # coding=utf-8 import urllib params=urllib.urlencode({'t':1,'eggs':2,'bacon':0})#现在大多数网站都是动态网页,需要你动态 ...

  3. appium---常用的adb命令

    在测试android-app的时候,adb命令可以帮助我们解决许多问题 什么是adb Android Debug Bridge,我们一般简称为adb,主要存放在sdk安装目录下的platform-to ...

  4. QT5:第一章 初始化

    一.简介 二.新建项目 在项目Application中: QT Widgets Application(桌面QT应用) QT Console Application(控制台QT应用) QT for P ...

  5. Neural Style论文笔记+源码解析

    引言 前面在Ubuntu16.04+GTX1080配置TensorFlow并实现图像风格转换中介绍了TensorFlow的配置过程,以及运用TensorFlow实现图像风格转换,主要是使用了文章A N ...

  6. 转 WebService两种发布协议--SOAP和REST的区别

    转发文章 https://blog.csdn.net/zl834205311/article/details/62231545?ABstrategy=codes_snippets_optimize_v ...

  7. nginx站点目录及文件URL访问控制

    一.根据扩展名限制程序和文件访问 利用nginx配置禁止访问上传资源目录下的PHP.Shell.Perl.Python程序文件. 配置nginx,禁止解析指定目录下的指定程序. location ~ ...

  8. Oracle rownum的理解

    核心过程分三步: 从表中取出行(无索引的话,顺序取出). 根据当前结果集,为当前行添加rownum. 条件筛选,如通过则添加到结果集中. 完.

  9. 能力不足之 根据时序图转化为Verilog代码

    不能够把时序图看的非常透彻,然后把时序图写成Verilog代码,有时候甚至搞不清楚信号之间的时序关系.

  10. (转)减少oracle sql回表次数 提高SQL查询性能

    要写出高效的SQL,那么必须必须得清楚SQL执行路径,介绍如何提高SQL性能的文章很多,这里不再赘述,本人来谈谈如何从 减少SQL回表次数 来提高查询性能,因为回表将导致扫描更多的数据块. 我们大家都 ...