BZOJ2118: 墨墨的等式(最短路 数论)
题意
墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N、{an}、以及B的取值范围,求出有多少B可以使等式存在非负整数解。
Sol
maya神仙题啊,感觉自己做题难度跨度太大了qwq。
这里有一篇讲的非常好的博客https://blog.csdn.net/w4149/article/details/66476606?locationNum=3&fps=1
思路大概就是 利用取余的性质,把能够构造出来的解表示成统一的形式
发现该形式可以通过最短路更新
然后就做完了。。
#include<cstdio>
#include<algorithm>
#include<stack>
#include<queue>
#include<cmath>
#include<cstring>
#define lb(x) (x & (-x))
#define Pair pair<int, int>
#define fi first
#define se second
#define MP(x, y) make_pair(x, y)
#define LL long long
using namespace std;
const int MAXN = 1e6 + ;
inline LL read() {
char c = getchar(); LL x = , f = ;
while(c < '' || c > '') {if(c == '-') f = -; c = getchar();}
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * f;
}
int N, vis[MAXN];
LL dis[MAXN], a[MAXN], Mi = 1e15, Bmin, Bmax;
void SPFA() {
queue<int> q;
memset(dis, 0xf, sizeof(dis));
dis[] = ; vis[] = , q.push();
while(!q.empty()) {
int p = q.front(); q.pop(); vis[p] = ;
for(int i = ; i <= N; i++) {
int to = (p + a[i]) % Mi;//tag
if(dis[to] > dis[p] + a[i]) {
dis[to] = dis[p] + a[i];
if(!vis[to]) vis[to] = , q.push(to);
}
}
}
}
LL Query(LL x) {
LL rt = ;
for(int i = ; i < Mi; i++)
if(dis[i] <= x)
rt += (x - dis[i]) / Mi + ;
return rt;
}
int main() {
N = read(); Bmin = read(); Bmax = read();
for(int i = ; i <= N; i++) {
a[i] = read();
if(a[i] != ) Mi = min(Mi, a[i]);
}
SPFA();
printf("%lld", Query(Bmax) - Query(Bmin - ));
return ;
}
/* */
BZOJ2118: 墨墨的等式(最短路 数论)的更多相关文章
- BZOJ2118墨墨的等式[数论 最短路建模]
2118: 墨墨的等式 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1317 Solved: 504[Submit][Status][Discus ...
- 【BZOJ2118】墨墨的等式(最短路)
[BZOJ2118]墨墨的等式(最短路) 题面 BZOJ 洛谷 题解 和跳楼机那题是一样的. 只不过走的方式从\(3\)种变成了\(n\)种而已,其他的根本没有区别了. #include<ios ...
- 【BZOJ2118】墨墨的等式 最短路
[BZOJ2118]墨墨的等式 Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值 ...
- BZOJ2118:墨墨的等式(最短路)
Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在 ...
- BZOJ2118: 墨墨的等式(最短路构造/同余最短路)
Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在 ...
- BZOJ2118 墨墨的等式 【最短路】
题目链接 BZOJ2118 题解 orz竟然是最短路 我们去\(0\)后取出最小的\(a[i]\),记为\(p\),然后考虑模\(p\)下的\(B\) 一个数\(i\)能被凑出,那么\(i + p\) ...
- [图论训练]BZOJ 2118: 墨墨的等式 【最短路】
Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在 ...
- Bzoj2118 墨墨的等式
Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1488 Solved: 578 Description 墨墨突然对等式很感兴趣,他正在研究a1x1+ ...
- 数论+spfa算法 bzoj 2118 墨墨的等式
2118: 墨墨的等式 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1283 Solved: 496 Description 墨墨突然对等式很感兴 ...
随机推荐
- Qt学习之网络编程(二)
UDP协议 UDP协议(用户数据报协议)是一种简单轻量级.不可靠.面向数据报.无连接的传输层协议.之后我们会介绍TCP协议,相对于UDP,TCP是一种可靠的.有连接的协议:既然这样我们就用TCP不就好 ...
- rsyslog服务器同步其他服务器上面应用日志(如mysql审计日志 、nginx日志)
**环境说明**系统:ubuntu 14.04 (CentOS可以参考http://www.cnblogs.com/hanyifeng/p/5463338.html) rsyslog版本 :8.16. ...
- Swing实现canvas-nest.js 源码
#### 说明 canvas-nest.js 源码 http://www.bubuko.com/infodetail-2237716.html 地址:https://gitee.com/dgwcode ...
- 1093 Count PAT's(25 分)
The string APPAPT contains two PAT's as substrings. The first one is formed by the 2nd, the 4th, and ...
- Redis Windows环境搭建
简介 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.它支持字符串.哈希表.列表.集合.有序集合,位图,hyperloglogs等数据类型.内置复制 ...
- 解决Maven依赖下载不全的问题
背景描述 在日常学习过程中使用Maven构建SpringBoot+SpringCloud服务时,有时会使用非正式版的SpringBoot和SpringCloud(非正式版是指不是最终发布的版本,而是测 ...
- 配置Linux环境
安装mariadb +主从复制https://www.cnblogs.com/pyyu/p/9467289.html 参考博客 redis https://www.cnblogs.com/pyyu/p ...
- ArrayList,Vector, LinkedList 的存储性能和特性
ArrayList 和Vector他们底层的实现都是一样的,都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内 ...
- Miner3D Professional专业版
——高级的可视化数据分析为专业人士量身打造 Miner3D Professional 专业版可以帮助工程师,研究人员,分析师,管理人员,知识工作者,以分析师和信息专家,在较短的时间内作出更好的判断.探 ...
- 【Android开发笔记】程序崩溃异常总结
广播注册相关(broadcastReceiver) 没有注册广播就注销广播 注册广播但未注销广播 注册广播后重复注销广播 解决办法: 添加一个布尔变量,注册广播后为true,若为true在执行注销,注 ...