[国家集训队]墨墨的等式

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。

 

题目可以这样变化一下:n个物品,可以用0-正无穷,问[l,r]区间内有多少价值可以凑出来。

联系到最短路上面:

任选一个ai>0,如果一个价值k∗ai+x(0≤x<ai,k≥0)可以被凑出来,那么显然(k+1)∗ai+x,(k+2)∗ai+x,...都可以被凑出来(这样x的范围就是小于ai了)

显然如果我们对于每个x都找到最小的k满足k∗ai+x可以被凑出来,这个问题就解决了,

如果满足凑出x的最小花费是大于b的,那么就不能在[l,r]区间内凑出mn*k+x,这个数了,

否则的话,就计算[l,r]内有多少个可以凑出来。

最短路,spfa 时间复杂度O(n∗ai∗log2ai) 因为复杂度与ai有关,所以我们就选择最小的ai了,

举个例子:当最小的ai等于1时,那么自然区间内的所有数都可以凑出来了。

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
const ll inf=9e18;
const int N=5e5+5;
int q[N],mn,n,a[20];
ll dis[N];
bool vis[N];
void spfa()
{int h=0,w=1,x,y; q[1]=0; vis[0]=1;/*第一个能凑出的数就是0*/ while (h!=w){h++; if (h>mn+5) h=1; x=q[h];/*循环队列,取出队头的数*/for (int i=1;i<=n;i++){y=(x+a[i])%mn;/*利用这个价值和其他价值组合所能达到的y,计算y的最小花费(因为只有计算最小花费),才能用mn凑出更多的满足区间条件的数*/if (dis[y]>dis[x]+a[i]){dis[y]=dis[x]+a[i];if (!vis[y]){vis[y]=1;w++; if (w>mn+5) w=1; q[w]=y;}}}vis[x]=0;}
}ll query(ll x)
{ll ans=0;for (int i=0;i<mn;i++)if (dis[i]<=x) ans+=(x-dis[i])/mn+1; /*计算有多少个k满足k*mn+i<=x,因为k>=0,所以还要加1*/return ans;
}/*windows 用I64d linux 用lld*/    
int main()
{mn=(1e9);ll L,R;scanf("%d%lld%lld",&n,&L,&R);for (int i=1;i<=n;i++) { scanf("%d",&a[i]); if (a[i]==0) { i--; n--; continue;} mn=min(mn,a[i]);}/*取出最小的an,但是不能为0,很好理解吧*/for (int i=1;i<mn;i++) dis[i]=inf;/*设达到每个k*mn+i(i<mn)的最小花费,所以数组dis中只有小于mn的i即可(*/spfa();printf("%lld\n",query(R)-query(L-1));return 0;
}

 

转载于:https://www.cnblogs.com/zzrblogs/p/10399061.html

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

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

相关文章

Storm简介

Storm是实时流式数据处理框架&#xff0c;支持多种编程语言 应用案例&#xff1a; realtime analytics online machine learning continuous computation distributed RPC ETL 性能&#xff1a;a million tuples per second per node 可扩展、高容错 结合消息队列和数据库…

持续集成之Jenkins安装部署

安装JDKJenkins是Java编写的&#xff0c;所以需要先安装JDK&#xff0c;这里采用yum安装&#xff0c;如果对版本有需求&#xff0c;可以直接在Oracle官网下载JDK。 [rootlinux-node1 ~]# yum install -y java-1.8.0 安装Jekins [rootlinux-node1 ~]# cd /etc/yum.repos.d/ […

2019/2/18 Python今日收获

Python day15——032&#xff0c;033异常处理&#xff1a;你不可能总是对的 1. Python标准异常总结AssertionError断言语句&#xff08;assert&#xff09;失败AttributeError尝试访问未知的对象属性EOFError用户输入文件末尾标志EOF&#xff08;Ctrld&#xff09;FloatingPoin…

Shell01

shell是一个命令解释器&#xff0c;是操作系统的最外层。 把用户的输入解释给操作系统&#xff0c;将操作系统的输入结果返回给用户。 硬件-->kernel-->shell-->外围应用程序 shell脚本&#xff1a;将命令或语句写入文件&#xff0c;进行操作系统管理。 shell脚本…

jenkins svn tomcat ant自动部署

Jenkins Jenkins是基于Java开发的一种持续集成工具&#xff0c;用于监控持续重复的工作&#xff0c;功能包括&#xff1a; 1、持续的软件版本发布/测试项目。 2、监控外部调用执行的工作。 跟其他持续集成相比&#xff0c;它的主要优点有&#xff1a; 开源&#xff0c;即免…

Shell02

局部变量 1、普通字符串变量 变量名value 变量名value #单引号中不进行变量解析&#xff0c;原样输出&#xff0c;应用不多 变量名"value" #双引号会解析变量 例&#xff1a; a1123 a2234 a3"345" echo "a1$a1" echo "a2$a2&quo…

553 mail from must equal authorized user解决方法

在配置发送邮件通知&#xff0c;验证其正确性时&#xff0c;出现"553 mail from must equal authorized user"提示的错误&#xff1b; 原因在于没有在"系统管理&#xff08;Manage Jenkins&#xff09;"的"系统设置&#xff08;Configure system&…

3.1 读入一个参数

已知正方形的边长&#xff0c;求出其面积。 输入样例&#xff1a; 1 2 3 4 输出样例&#xff1a; 1 4 9 16 #include<iostream> #include<fstream> using namespace std;int main() {ifstream cin("test.txt");//向OJ提交时&#xff0c;注释此句i…

[Apple开发者帐户帮助]八、管理档案(2)创建临时配置文件(iOS,tvOS,watchOS)...

创建临时配置文件以在设备上运行您的应用程序而无需Xcode。在开始之前&#xff0c;您需要一个App ID&#xff0c;一个分发证书和多个注册设备。 有关完整的临时配置文件工作流程&#xff0c;请转到Xcode帮助中的分发到已注册设备&#xff08;iOS&#xff0c;tvOS&#xff0c;wa…

Ant Build.xml

题记&#xff1a;用 Eclipse 3 &#xff0b;Tomcat 5 做东东&#xff0c;用起来还是比较爽。但是调试时每次手动Deploy到Tomcat中&#xff0c;比较麻烦。今用Ant来完成之。 1。打开Eclipse&#xff0c;在项目的根路径下建立builds.xml文件。 这个是Ant配置的关键。其内容如下&…

3.2 读入两个参数

计算两个整数的差。 输入样例&#xff1a; 1 3 5 7 输出样例&#xff1a; -2 -2 #include<iostream> #include<fstream> using namespace std;int main() {ifstream cin("test.txt");//向OJ提交时&#xff0c;注释此句int num1, num2;while (cin &g…

解决做好一个机器学习项目的3个问题

机器学习是目前人工智能最令人激动的研究方向之一。我们可能更关注机器学习算法的实现细节&#xff0c;沉浸于机器学习所需要的数学功底&#xff0c;但对于机器学习从业者来说&#xff0c;如何更好更快速的实现一个机器学习项目更值得关注。 正如吴恩达在《机器学习》这门课中所…

数据挖掘的相关知识例子

一、贝叶斯 贝叶斯定理由英国数学家贝叶斯 ( Thomas Bayes 1702-1761 ) 发展&#xff0c;用来描述两个条件概率之间的关系&#xff0c;比如 P(A|B) 和 P(B|A)。按照乘法法则&#xff0c;可以立刻导出&#xff1a;P(A∩B) P(A)*P(B|A)P(B)*P(A|B)。如上公式也可变形为&#xf…

3.3 1!到n!的和

求1! 2! ... n! 的结果。 输入样例&#xff1a; 3 6 输出样例 9 873 #include<iostream> #include<fstream> using namespace std;int main() {ifstream cin("test.txt");//向OJ提交时&#xff0c;注释此句int num;while (cin >> num){int…

[币严区块链]以太坊(ETH)Dapp开发入门教程之宠物商店领养游戏

阅读本文前&#xff0c;你应该对以太坊、智能合约有所了解&#xff0c;如果你还不了解&#xff0c;建议你先看以太坊是什么 除此之外&#xff0c;你最好还了解一些HTML及JavaScript知识。 本文通过实例教大家来开发去中心化应用&#xff0c;应用效果如图: 项目背景 Pete有一个…

怎么通俗易懂地解释贝叶斯网络和它的应用?

作者&#xff1a;小杰链接&#xff1a;https://www.zhihu.com/question/28006799/answer/38996563来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。英语原文&#xff1a;http://www.norsys.com/tutorials/netica/secA/tut…

3.4 等比数列

已知q与n&#xff0c;求等比数列之和&#xff1a;1 q q^2 ... q^n 输入样例&#xff1a; 6 0.3 5 1.3 输出样例&#xff1a; 1.428 12.756 #include<iostream> #include<fstream> #include<cmath> using namespace std;int main() {ifstream cin(…

SVM分类算法的基本理论问题

1.引言   随着网络技术的飞速发展和普及&#xff0c;进入了信息大爆炸的时代。信息无处不在&#xff0c;给我们的学习生活带来了诸多便捷&#xff0c;由于堪称海量的信息量&#xff0c;我们从中获取有用的信息变得困难&#xff0c;解决这一难题就是要对这些大量的信息进行分…

3.5 斐波那契数

求第n项的斐波那契数。 1 1 2 3 5 8 ... 输入样例&#xff1a; 6 10 输出样例&#xff1a; 8 55 #include<iostream> #include<fstream> #include<cmath> using namespace std;int main() {ifstream cin("test.txt");//向OJ提交时&#xff…

决策树案例理解

小王是一家著名高尔夫俱乐部的经理。但是他被雇员数量问题搞得心情十分不好。某些天好像所有人都來玩高尔夫&#xff0c;以至于所有员工都忙的团团转还是应付不过来&#xff0c;而有些天不知道什么原因却一个人也不来&#xff0c;俱乐部为雇员数量浪费了不少资金。 小王的目的是…