正题

题目链接:https://www.luogu.com.cn/problem/P2371


题目大意

nnn个aia_iai​,求有多少个b∈[l,r]b\in[l,r]b∈[l,r]满足∑i=1naixi=b\sum_{i=1}^na_ix_i=b∑i=1n​ai​xi​=b有正整数解。


解题思路

因为有一个a1a_1a1​在,而且x1x_1x1​可以是任意正整数,所以如果在bbb很大的情况下,能够凑出一个数kkk使得k%a1=b%a1k\% a_1=b\% a_1k%a1​=b%a1​那就能凑出bbb。

所以我们设fif_ifi​表示能凑出的最小的kkk使得k%a1=ik\% a_1=ik%a1​=i。然后最短路转移即可。

时间复杂度O(a1n)O(a_1n)O(a1​n)


codecodecode

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define ll long long
using namespace std;
const ll N=5e5+10;
struct node{ll to,next,w;
}a[N*20];
struct point{ll x,dis;
};
bool operator<(point x,point y)
{return x.dis>y.dis;}
priority_queue<point> q;
ll n,m,l,r,tot,f[N],ls[N],w[N];
bool v[N];
void addl(ll x,ll y,ll w){a[++tot].to=y;a[tot].next=ls[x];a[tot].w=w;ls[x]=tot;return;
}
void Dij(){memset(f,0x3f,sizeof(f));f[0]=0;q.push((point){0,0});while(!q.empty()){ll x=q.top().x;q.pop();if(v[x])continue;v[x]=1;for(ll i=ls[x];i;i=a[i].next){ll y=a[i].to;if(f[x]+a[i].w<f[y]){f[y]=f[x]+a[i].w;if(!v[y])q.push((point){y,f[y]});}}}return;
}
ll get(ll x){ll ans=0;for(ll i=0;i<m;i++)if(x>=f[i])ans+=(x-f[i])/m+1;return ans;
}
int main()
{scanf("%lld%lld%lld",&n,&l,&r);for(ll i=1;i<=n;i++)scanf("%lld",&w[i]);for(ll i=1;i<=n;i++)if(!w[i])swap(w[i],w[n]),n--;sort(w+1,w+1+n);m=w[1];for(ll i=2;i<=n;i++){for(ll j=0;j<m;j++)addl(j,(j+w[i])%m,w[i]);}Dij();printf("%lld",get(r)-get(l-1));
}

P2371-[国家集训队]墨墨的等式【同余最短路】相关推荐

  1. P2371 [国家集训队]墨墨的等式 ——同余最短路

    P2371 思路 同余最短路,自我感觉做这类题要注意两点. 1.虽然n的范围很小,但实际建图的点的数量为min{a_i} =5e5,边的数量为n∗ain * a_in∗ai​即12*5e5. 2.和上 ...

  2. P2371 [国家集训队]墨墨的等式 同余最短路

    传送门 题意: 思路: 一个同于最短路的板子题,初始的时候值为0,所以设dis[0]=0dis[0]=0dis[0]=0,让后选择一个最小的a[i]a[i]a[i]作为basebasebase,跑一遍 ...

  3. 洛谷 P2371 [国家集训队]墨墨的等式

    题面 题意 给出n个数,每个数可以选无数次,现在问l与r之间有多少数可以作为选取数之和. 做法 因为数据范围很大,所以根本不能一个一个去更新,但可以从余数的角度去考虑. 我们令这些数中最小的数为t,p ...

  4. BZOJ2118墨墨的等式[数论 最短路建模]

    2118: 墨墨的等式 Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 1317  Solved: 504 [Submit][Status][Disc ...

  5. BZOJ 2118: 墨墨的等式(最短路dijkstra+堆)

    2118: 墨墨的等式 Time Limit: 10 Sec Memory Limit: 259 MB Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+-+anxn=B存 ...

  6. p2371bzoj2118 墨墨的等式

    传送门(bzoj) 题目 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+-+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存 ...

  7. bzoj 2118 墨墨的等式 - 图论最短路建模

    墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+-+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在非负整数解. Input ...

  8. Luogu P2619 [国家集训队2]Tree I(WQS二分+最小生成树)

    P2619 [国家集训队2]Tree I 题意 题目描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有\(need\)条白色边的生成树. 题目保证有解. 输入输出格式 输入格式 ...

  9. [国家集训队]数颜色 / 维护队列 (带修莫队模板题)

    题意: 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R支画笔中共有几种不同颜色的画笔. 2. ...

  10. BZOJ 2156 「国家集训队」星际探索(最短路)【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2156 是 hydro 的 BZOJ ...

最新文章

  1. zen3架构_AMD Zen3架构处理器的L3缓存或将翻倍到64MB
  2. 使用PlantText画时序图分析业务流程
  3. ASP.NET自带机制不刷新页面
  4. 【安全漏洞】CVE-2021-1732 win32k漏洞分析
  5. C++期末实践程序设计与数组作为参数的注意事项
  6. Linux脚本编写基础
  7. 一个新的轮回,一个新的开始
  8. SSM小区停车场管理系统
  9. 常用的Wi-Fi产品调试测试工具
  10. 在云服务器上搭建Kali系统-最新kali2021.3版本+避坑指南
  11. 区块链打击食品欺诈:以挪威三文鱼为例
  12. 计算机桌面调音量的图标不见了,声音图标不见了,音量图标不见了怎么办?
  13. shiny导出html,将R Shiny页面导出为PDF
  14. GitHub入门操作(详细)
  15. 云计算day02-KVM
  16. ikbc pocker键盘 快捷键说明
  17. quartus频率计 时钟设置_频率计的使用说明
  18. 终于有人把云计算与数据库的关系讲明白了
  19. 文件服务器管理软件有哪些,​共享文件管理软件有哪些功能?
  20. Python 安装setuptools方法

热门文章

  1. ubuntu运行python ide_在Ubuntu-16.04中安装Python可视化IDE——Spyder
  2. 嵌入式linux配置qt,基于qt的嵌入式Linux开发环境搭建
  3. java之static关键词的作用
  4. java中static x 5_java中static作用详解
  5. linux命令apprw,linux命令学习1(示例代码)
  6. 算法设计与分析——回溯法——旅行售货员问题
  7. 后端学习 - SpringBoot
  8. leetcode232. 用栈实现队列
  9. Java用TCP手写聊天室 可以 私聊版加群聊版
  10. GCD and LCM HDU - 4497(素数打表+唯一分解定理)求多少种情况