【洛谷】P2371 [国家集训队]墨墨的等式(屠版题)
先讲讲曲折的思路吧......
首先,应该是CRT之类的东西,乱搞
不行......打了打草稿,发现有解的情况是gcd(a1,a2.....an)|B,于是可以求gcd然后O(n)查询?但是B的范围直接劝退...
(这是cyr大佬讲的“烂大街”的套路(来自ctsc哦))于是我翻开了课件和百度
课件:最短路乱搞 百度:同余最短路???
说白了还是数论喽???
题解:
在课件和草稿纸的帮助下,我成功地推出了一个结论:
对于最后一个a,也就是an,设anxn=q,假设前面的数加起来是S,则S+q=B;
对于不同的Xn,q总是一个等差数列。
所以:(B-S)%an=0;
∴B %an=S%an.(B>S)
所以发现:如果式子可以达到S+q,那么式子一定也能达到S+(i*q)。
所以我们的任务就是求对于每一个a的最小S。
怎么求呢?
首先找出ai中的最小值mn
因为要求剩余系嘛,剩余我们可以连边,在i与(a[i]+i)%mn之间连一条权值为a[i]的单向边,表示在mod mn=i到mod mn=(i+ai)%mn之间,可以通过a[j]的代价达到,于是这样就处理出了每一个点的最小剩余系
于是,对于每一个S,答案就是Σ(dis[i]<a[j])(a[i]-dis[i])/mn+1
于是,这题的代码就没有什么含金量了(虽然我调了整整一上午+1h,而且整整屠了一个半的版)
坑点1:会爆long long
坑点2:无脑开long long会MLE
坑点3、long long 和int不能乱用
代码1(跑得快的)(因为没有邻接表,直接从前面一个点得出下面一个点)
// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int maxn=5e6+;
const int maxm=5e5+;
const ll inf=1e12+;
int n;
int tot;
ll l,r;
int mn=maxm+;
int a[maxm];
int cnt,head[maxm];
inline ll read()
{
ll f=,x=;char s=getchar();
while(s>''||s<''){if(s=='-')f=-;s=getchar();}
while(s<=''&&s>=''){x=x*+s-'';s=getchar();}
return x*f;
}
struct edge
{
int to,next,dis;
}e[maxn];
inline void addedge(int from,int to,int dis)
{
e[++cnt].next=head[from];
e[cnt].to=to;
e[cnt].dis=dis;
head[from]=cnt;
}
ll dis[maxn];
int vis[maxn];
struct cmp
{
bool operator() (int a,int b)
{
return dis[a]>dis[b];
}
};
//queue < int > q;
priority_queue < int , vector < int > , cmp > q;
void spfa(int s)
{
memset(dis,0x3f,sizeof(dis));
q.push(s);
dis[s]=;
vis[s]=;
while(!q.empty())
{
int u=q.top();
q.pop();
vis[u]=;
for(int i=;i<=n;i++)
{
int v=(u+a[i])%mn;
if(dis[v]>dis[u]+a[i])
{
dis[v]=dis[u]+a[i];
if(vis[v]==)
{
vis[v]=;
q.push(v);
}
}
}
}
}
ll query(ll x)
{
ll res=;
for(int i=;i<=mn;i++)
{
if(dis[i]<=x)
{
res+=(x-dis[i])/mn+;
}
}
return res;
}
int main()
{
n=read();l=read();r=read();//
for(int i=;i<=n;i++)
{
ll x;
x=read();
if(x==)
continue;
a[++tot]=x;
mn=min(mn,a[i]); }
/*for(ll i=0;i<=mn;i++)
{
for(int j=1;j<=tot;j++)
{
if(a[j]!=mn)
addedge(i,(i+a[j])%mn,a[j]);
}
}*/
spfa();
printf("%lld",query(r)-query(l-));
return ;
}
代码2:(跑得慢的)
把上面魔改一下就行了233....
慢着!你以为到这就结束了?
↘ ↓ ↙
→ 传送门 ←
↗ ↑ ↖
(完)
【洛谷】P2371 [国家集训队]墨墨的等式(屠版题)的更多相关文章
- 洛谷P2371 [国家集训队]墨墨的等式
P2371 [国家集训队]墨墨的等式 题目描述 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+-+anxn=Ba_1x_1+a_2y_2+-+a_nx_n=Ba1x1+a2y2+-+a ...
- 模板—点分治A(容斥)(洛谷P2634 [国家集训队]聪聪可可)
洛谷P2634 [国家集训队]聪聪可可 静态点分治 一开始还以为要把分治树建出来……• 树的结构不发生改变,点权边权都不变,那么我们利用刚刚的思路,有两种具体的分治方法.• A:朴素做法,直接找重心, ...
- [洛谷P1527] [国家集训队]矩阵乘法
洛谷题目链接:[国家集训队]矩阵乘法 题目背景 原 <补丁VS错误>请前往P2761 题目描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入输出格式 输入 ...
- BZOJ2120/洛谷P1903 [国家集训队] 数颜色 [带修改莫队]
BZOJ传送门:洛谷传送门 数颜色 题目描述 墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. Q L R代表询问你从第L支画笔到第R ...
- 洛谷 P1903 [国家集训队]数颜色 解题报告
P1903 [国家集训队]数颜色 题目描述 墨墨购买了一套\(N\)支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1.Q L R代表询问你从第\(L\) ...
- 洛谷P1501 [国家集训队]Tree II(LCT,Splay)
洛谷题目传送门 关于LCT的其它问题可以参考一下我的LCT总结 一道LCT很好的练习放懒标记技巧的题目. 一开始看到又做加法又做乘法的时候我是有点mengbi的. 然后我想起了模板线段树2...... ...
- 洛谷 P1903 [国家集训队]数颜色 / 维护队列
墨墨购买了一套N支彩色画笔(其中有些颜色可能相同),摆成一排,你需要回答墨墨的提问.墨墨会向你发布如下指令: 1. \(Q\) \(L\) \(R\) 代表询问你从第L支画笔到第R支画笔中共有几种不同 ...
- 洛谷P2619 [国家集训队2]Tree I(带权二分,Kruscal,归并排序)
洛谷题目传送门 给一个比较有逼格的名词--WQS二分/带权二分/DP凸优化(当然这题不是DP). 用来解决一种特定类型的问题: 有\(n\)个物品,选择每一个都会有相应的权值,需要求出强制选\(nee ...
- 洛谷 P1407 [国家集训队]稳定婚姻 解题报告
P1407 [国家集训队]稳定婚姻 题目描述 我国的离婚率连续7年上升,今年的头两季,平均每天有近5000对夫妇离婚,大城市的离婚率上升最快,有研究婚姻问题的专家认为,是与简化离婚手续有关. 25岁的 ...
- 洛谷 P1852 [国家集训队]跳跳棋 解题报告
P1852 [国家集训队]跳跳棋 题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在\(a\),\(b\), ...
随机推荐
- 项目一:ssm超市订单管理系统
声明:项目参考于课程教材,学习使用,仅在此记录 项目介绍 ssm超市订单管理系统,功能模块有订单管理,供应商管理,用户管理,密码修改,退出系统,管理模块中包括基本的增删改查 集成工具使用idea,基于 ...
- 自己写的Weblogic的poc
""" 暂时只试用于Linux,先试试用一下反弹shell CVE-2017-10271的EXp """ import requests i ...
- python编程基础之二十六
偏函数:当一个函数有大量的参数时候,调用时候非常不方便,于是就可以用偏函数解决,将一些参数固定(默认值),达到简化函数调用的目的 使用偏函数需要导入functools import functools ...
- SpringCloud教程二:Ribbon(Finchley版)
在上一篇文章,讲了服务的注册和发现.在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的.Spring cloud有两种服务调用方式,一种是ribbon+r ...
- Ubuntu系统下制作U盘启动盘
在终端输入 sudo fdisk -l 查看U盘的路径,如/dev/sdb或/dev/sdc. 然后下载ISO文件,如文件路径为/home/raina/xxx.iso 在终端输入 sudo dd if ...
- 代码审计准备之Thinkphp3
0x01环境部署: 下载: 获取ThinkPHP的方式很多,官方网站(http://thinkphp.cn)是最好的下载和文档获取来源. 官网提供了稳定版本的下载:http://thinkphp.cn ...
- msf各种弱口令爆破
Msf: 写的很乱 记录下msf各个爆破弱口令的模块 run post/windows/gather/arp_scanner RHOSTS=10.10.10.0/24 使用arp_scanner模块 ...
- Windows 7 SP1官方原版ISO系统镜像所有版本下载集合
========================================================================== Windows 7 With SP1 32位简体中 ...
- 数据结构1_java---单链表的操作,约瑟夫问题
我们经常实用c++来建立链表,为了学习的方便,此处我使用java实现了对链表的增删改查功能 整个过程较为简单.仅供参考 流程: (1)通过内部类Node建立结点,内部变量作为指针域和数据域,并写下构造 ...
- Async,Await和ConfigureAwait的关系
[转自]https://mp.weixin.qq.com/s/h10V-FshGoaQUWFPfy-azg 在.NET Framework 4.5中,async / await关键字已添加到该版本中, ...