[图论训练]BZOJ 2118: 墨墨的等式 【最短路】
Description
墨墨突然对等式很感兴趣,他正在研究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。
思路:看起来是数论的题目,关键是对于一个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: 墨墨的等式 【最短路】的更多相关文章
- [图论训练]BZOJ 3245: 最快路线【最短路】
Description 精 明的小R每每开车出行总是喜欢走最快路线,而不是最短路线.很明显,每条道路的限速是小R需要考虑的关键问题.不过有一些限速标志丢失了,于是小R将不知 道能开多快.不过有一个合理 ...
- 【BZOJ 2118】 墨墨的等式(Dijkstra)
BZOJ2118 墨墨的等式 题链:http://www.lydsy.com/JudgeOnline/problem.php?id=2118 Description 墨墨突然对等式很感兴趣,他正在研究 ...
- 【BZOJ 2118】墨墨的等式
http://www.lydsy.com/JudgeOnline/problem.php?id=2118 最短路就是为了找到最小的$x$满足$x=k×a_{min}+d,0≤d<a_{min}$ ...
- [图论训练]BZOJ 1624: [Usaco2008 Open] Clear And Present Danger 寻宝之路【floyd】
Description 农夫约翰正驾驶一条小艇在牛勒比海上航行. 海上有N(1≤N≤100)个岛屿,用1到N编号.约翰从1号小岛出发,最后到达N号小岛.一 张藏宝图上说,如果他的路程上 ...
- bzoj 2118 墨墨的等式 - 图论最短路建模
墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在非负整数解. Input ...
- 数论+spfa算法 bzoj 2118 墨墨的等式
2118: 墨墨的等式 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1283 Solved: 496 Description 墨墨突然对等式很感兴 ...
- 【BZOJ 2118】 2118: 墨墨的等式 (最短路)
2118: 墨墨的等式 Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求 ...
- bzoj 2118: 墨墨的等式
Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+-+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在 ...
- bzoj 2118: 墨墨的等式 spfa
题目: 墨墨突然对等式很感兴趣,他正在研究\(a_1x_1+a_2y_2+ ... +a_nx_n=B\)存在非负整数解的条件,他要求你编写一个程序,给定\(N,\{a_n\}\)以及\(B\)的取值 ...
随机推荐
- C#的位运算
链接地址: http://www.cnblogs.com/NetBelieve/archive/2012/07/30/2615006.html
- CodeForces 66C Petya and File System (实现)
模拟题,map搞一搞.要想清楚一个结点应该是要通过一个字符串找到下一个结点,题目保证所以文件夹非空,所以只要判断一个结点是不是叶子结点就可以判断它是不是文件,用了点c11的特性. #include&l ...
- PMD 编译 语法分析 词法分析 抽象语法树
编译原理 163 课堂 http://mooc.study.163.com/learn/-1000002001?tid=1000003000#/learn/content?type=detail&am ...
- CF-1093 (2019/02/10)
CF-1093 1093A - Dice Rolling 输出x/2即可 #include<bits/stdc++.h> using namespace std; int main() { ...
- 编译安装 nginx php swoole
安装之前先 准备环境 yum install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel 然后 ...
- (75)zabbix_server.conf配置文件详解
############ GENERAL PARAMETERS ################# ### Option: ListenPort# Listen port for trapper.# ...
- composer安装laravel-u-editor及其使用
前言 使用的框架是laravel5.1,是composer搭建的,可以直接配置composer,如果不是composer搭建的larave,需要先安装composer,具体安装发放可以参考compo ...
- 标准C++(1)
一.引用 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样. 引用的声明方法:类型标识符 &引用名=目标变量名: 例: int& num; 引用类似于起别名 注 ...
- Linux基础学习-LVM逻辑卷管理遇到的问题
LVM学习逻辑卷管理创建逻辑卷遇到的问题 1 实验环境 系统 内核 发行版本 CentOS 2.6.32-754.2.1.el6.x86_64 CentOS release 6.10 (Final) ...
- Java-JFrame-swing嵌套浏览器步骤
Java-JFrame-swing嵌套浏览器步骤 一.使用swing嵌套浏览器要实现的功能: 通过java的swing实现在一个窗体中嵌套一个浏览器,可以在这个浏览器中将另一个项目的内容显示出来,只需 ...