博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[2019.2.28]BZOJ2118 墨墨的等式
阅读量:6266 次
发布时间:2019-06-22

本文共 1219 字,大约阅读时间需要 4 分钟。

我们设最小的系数为\(m\)

那么如果\(B=im+j\)(\(i,j\)为非负整数,\(j<m\))有整数解,那么\(B=(i+k)m+j\)(\(k\)为正整数)也有整数解。我们只需要把\(B=im+j\)的整数解中系数\(m\)对应的未知数加\(k\)就好了。

所以我们记\(d_i\)表示\(B\)\(mod\ m\)意义下同余\(i\),并且这个\(B\)有解的最小的\(B\)

显然\(d_0=0\)

以及我们可以用\(d_i+a_j\)更新\(d_{(i+a_j)mod\ m}\)

那么可以理解为对于任意\(0\le i<m\)\(1\le j\le n\),节点\(i\)到节点\((i+a_j)mod\ m\)有一条权值为\(a_j\)的单向边。那么\(d_i\)就是节点0到节点\(i\)的最短路。

所以我们之所以选择最小的系数作为\(m\),是为了减少状态数。

跑一遍玄学的SPFA就能够处理出\(d\)了。

那么在\(mod\ m\)意义下和\(i\)同余且小于等于\(x\)的合法的\(B\)的取值数量为\(\lfloor\frac{x-d_i+m}{m}\rfloor\)

于是我们设\(0\le B\le x\)时,使得方程有非负整数解的\(B\)取值的数量为\(ans(x)\),则\(ans(x)=\sum_{i=0}^{m-1}\lfloor\frac{max(x-d_i+m,0)}{m}\rfloor\)

题目所求即为\(ans(BMax)-ans(BMin-1)\)

code:

#include
using namespace std;const long long INF=1e13;struct edge{ int t,v,nxt;}e[6000010];int n,a[15],mn=1e9,cnt,be[500010],t,vis[500010];long long bl,br,dis[500010],tot;queue
q;void add(int x,int y,int val){ e[++cnt].t=y,e[cnt].v=val,e[cnt].nxt=be[x],be[x]=cnt;}void SPFA(){ for(int i=1;i
dis[t]+e[i].v?dis[e[i].t]=dis[t]+e[i].v,(!vis[e[i].t]?q.push(e[i].t),vis[e[i].t]=1:0):0; }}long long ANS(long long x){ tot=0; for(int i=0;i

转载于:https://www.cnblogs.com/xryjr233/p/BZOJ2118.html

你可能感兴趣的文章
RPC 使用中的一些注意点
查看>>
Django_rest framework 框架介绍
查看>>
Hello world,Hello 2014,Bye 2013
查看>>
python之正则表达式模块
查看>>
BFC和清除浮动
查看>>
笔记:2016-06-04
查看>>
ECSHOP 布局参考图
查看>>
Entity Framework 延伸系列目录
查看>>
Java 代码安全(一) —— 避免用String储存敏感数据
查看>>
制作一个最小Linux系统
查看>>
3个著名加密算法(MD5、RSA、DES)的解析
查看>>
BBS(仿博客园系统)项目05(后台管理功能实现:文章添加、富文本编辑器使用、xss攻击、BeautifulSoup4模块、富文本编辑器上传图片、修改头像)...
查看>>
图说机房空气焓湿处理过程
查看>>
django-auth认证模块
查看>>
check build status
查看>>
int类型究竟占几个字节
查看>>
13.使用toggle()方法绑定多个函数
查看>>
springboot集成redis
查看>>
装饰器的应用-装饰器带参数和不带参数
查看>>
数据库 --> SQL 和 NoSQL 的区别
查看>>