p2371&bzoj2118 墨墨的等式
题目
墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N、{an}、以及B的取值范围,求出有多少B可以使等式存在非负整数解。
Input
输入的第一行包含3个正整数,分别表示N、BMin、BMax分别表示数列的长度、B的下界、B的上界。输入的第二行包含N个整数,即数列{an}的值。
Output
输出一个整数,表示有多少b可以使等式存在非负整数解。
Sample Input
3 5
Sample Output
HINT
对于100%的数据,N≤12,0≤ai≤5*10^5,1≤BMin≤BMax≤10^12。
分析
我们先对输入的a进行排序,我们设第一个非零数为a1,我们不难得出如果ka1+b>=BMin,那对于(k+1)a1+b,(k+2)a1+b......(k+m)a1+b同样满足此条件,这里的b就是BMin%a1的余数。所以我们的任务就可以转换为求对于[0,a1-1]的b对应的k的最小值,然后求出在BMax范围内的k的总个数就行了。然后我们考虑建图跑最短路求最小值,设我们有一个余数bi,那通过bi可到达的点就依次(bi+a2)%a1,(bi+a3)%a2......那我们不难得出所到达的点比原来的点多了(bi+aj)/a1个a1,所以这之间的距离就是这个数。既然我们建出了图,那我们就可以最短路求出kmin了,之后经过简单处理就可以求出答案
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<stack>
using namespace std;
const long long inf=1e12+7;
long long vis[1000100],kmin[1000100],a[5000],n,m,bmin,bmax;
priority_queue<pair<long long,long long> >q;
vector<pair<long long,long long> >v[1000100];
inline void read(long long &x){
char s;s=getchar();long long f=1;x=0;while(s>'9'||s<'0'){f=-1;s=getchar();}
while(s<='9'&&s>='0'){x=(x<<3)+(x<<1)+(s-'0');s=getchar();}x*=f;
}
inline void go(int r){
long long i,j,k;
for(i=1;i<r;i++)kmin[i]=inf;
q.push(make_pair(0,0));
while(!q.empty()){
long long x=q.top().second;
q.pop();
if(vis[x])continue;
vis[x]=1;
for(i=0;i<v[x].size();i++){
long long y=v[x][i].first,z=v[x][i].second;
if(kmin[x]+z<kmin[y]){
kmin[y]=kmin[x]+z;
q.push(make_pair(-kmin[y],y));
}
}
}
}
int main(){
long long i,j,k,wh=0,ans=0,x,y;
read(n);read(bmin);read(bmax);
for(i=1;i<=n;i++)
read(a[i]);
sort(a+1,a+n+1);
for(i=1;i<=n;i++)
if(a[i]!=0){
wh=i;
break;
}
if(!wh){puts("0");return 0;}
for(i=wh+1;i<=n;i++)
for(j=0;j<a[wh];j++){
v[j].push_back(make_pair((j+a[i])%a[wh],(j+a[i])/a[wh]));
}
go(a[wh]);
for(i=0;i<a[wh];i++)
if(kmin[i]<inf){
x=(bmax-i)/a[wh];
y=(bmin-i-1)/a[wh]+1;
if(x<kmin[i])continue;
ans+=(x-max(kmin[i],y)+1);
}
cout<<ans<<endl;
return 0;
}
p2371&bzoj2118 墨墨的等式的更多相关文章
- 【BZOJ2118】墨墨的等式(最短路)
[BZOJ2118]墨墨的等式(最短路) 题面 BZOJ 洛谷 题解 和跳楼机那题是一样的. 只不过走的方式从\(3\)种变成了\(n\)种而已,其他的根本没有区别了. #include<ios ...
- 【BZOJ2118】墨墨的等式 最短路
[BZOJ2118]墨墨的等式 Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值 ...
- 洛谷P2371 [国家集训队]墨墨的等式
P2371 [国家集训队]墨墨的等式 题目描述 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+-+anxn=Ba_1x_1+a_2y_2+-+a_nx_n=Ba1x1+a2y2+-+a ...
- 【同余最短路】【例题集合】洛谷P3403 跳楼机/P2371 墨墨的等式
接触到的新内容,[同余最短路]. 代码很好写,但思路不好理解. 同余最短路,并不是用同余来跑最短路,而是通过同余来构造某些状态,从而达到优化时间空间复杂度的目的.往往这些状态就是最短路中的点,可以类比 ...
- BZOJ2118墨墨的等式[数论 最短路建模]
2118: 墨墨的等式 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1317 Solved: 504[Submit][Status][Discus ...
- Bzoj2118 墨墨的等式
Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1488 Solved: 578 Description 墨墨突然对等式很感兴趣,他正在研究a1x1+ ...
- BZOJ2118: 墨墨的等式(同余类BFS)(数学转为图论题)
2118: 墨墨的等式 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2944 Solved: 1206[Submit][Status][Discu ...
- BZOJ2118:墨墨的等式(最短路)
Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在 ...
- BZOJ2118: 墨墨的等式(最短路 数论)
题意 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在非负整数解. So ...
随机推荐
- 统计apachelog各访问状态个数(使用MapReduce)
统计日志文件中各访问状态的个数. 1.将日志数据上传到hdfs 路径 /mapreduce/data/apachelog/in 中 内容如下 ::::::: - - [/Feb/::: +] :::: ...
- 在eclipse中引入jquery.js文件报错的解决方案
从官方下载的jquery.js在myeclipse始终用个大大的红叉,看着很不爽,如何解决呢:jquery.js在myeclipse中报错:jquery.js -> 鼠标右键 -> MyE ...
- 分享知识-快乐自己:shiro 异常类型
<!-- 身份认证异常 --> 1):身份令牌异常,不支持的身份令牌 --> org.apache.shiro.authc.pam.UnsupportedTokenException ...
- 分享知识-快乐自己:Java常用API总结
1):java.io.BufferedReader类(用于从文件中读入一段字符:所属套件:java.io) 1. 构造函数BufferedReader(java.io.FileReader FileR ...
- linux命令学习笔记(10):cat 命令
cat命令的用途是连接文件或标准输入并打印.这个命令常用来显示文件内容,或者将几个文件连接起来显示, 或者从标准输入读取内容并显示,它常与重定向符号配合使用. .命令格式: cat [选项] [文件] ...
- STL stl_uninitialized.h
stl_uninitialized.h // Filename: stl_uninitialized.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com ...
- Ffmpeg移植S3C2440
Ffmpeg移植过程: FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证.它的移植同样遵循LGPL或GPL移植方法:configure.make.make ...
- POJ2442:Sequence
浅谈堆:https://www.cnblogs.com/AKMer/p/10284629.html 题目传送门:http://poj.org/problem?id=2442 我们先简化题意,假设只有两 ...
- CentOS 6.X 安装 EPEL 源
CentOS 6.X 自带的软件源可选的并不多,有时候要找到一个偏门一些的软件,用命令一搜怎么都没有源,考虑到使用软件源配合 yum 命令安装可以自动安装依赖,所以加一个新的软件源迫在眉睫. 考虑到同 ...
- app专项测试(稳定性测试、安全性测试)
https://blog.csdn.net/xiaomaoxiao336368/article/details/84887948