【刷题】BZOJ 5418 [Noi2018]屠龙勇士
www.lydsy.com/JudgeOnline/upload/noi2018day2.pdf
Solution
将攻击的式子列出来,\(atk \times x-p \times y=a_i\)
这不就是个扩欧的裸式子嘛,求出 \(x\) 的解的式子 \(x=x_0+r \times dis\),其中 \(r\) 为任意整数,\(dis\) 为不定方程解的间隔
上面的式子发现又是一个同余方程
对于每一条龙都是一个同余方程,那么就是要解一个同余方程组的最小解
用扩展CRT就好了
#include<bits/stdc++.h>
#define ui unsigned int
#define ll long long
#define db double
#define ld long double
#define ull unsigned long long
const int MAXN=100000+10;
ll T,n,m,h[MAXN],p[MAXN],rem[MAXN],mod[MAXN],v[MAXN],k[MAXN],lm;
std::multiset<ll> S;
template<typename T> inline void read(T &x)
{
T data=0,w=1;
char ch=0;
while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();
if(ch=='-')w=-1,ch=getchar();
while(ch>='0'&&ch<='9')data=((T)data<<3)+((T)data<<1)+(ch^'0'),ch=getchar();
x=data*w;
}
template<typename T> inline void write(T x,char ch='\0')
{
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+'0');
if(ch!='\0')putchar(ch);
}
template<typename T> inline void chkmin(T &x,T y){x=(y<x?y:x);}
template<typename T> inline void chkmax(T &x,T y){x=(y>x?y:x);}
template<typename T> inline T min(T x,T y){return x<y?x:y;}
template<typename T> inline T max(T x,T y){return x>y?x:y;}
inline ll mul(ll a,ll b,ll Mod)
{
ll res=0;
if(b<0)a=(a%Mod+Mod)%Mod,b=(b%Mod+Mod)%Mod;
while(b)
{
if(b&1)res=(res+a)%Mod;
a=(a+a)%Mod;
b>>=1;
}
return res;
}
inline ll exgcd(ll a,ll b,ll &x,ll &y)
{
if(b==0)
{
x=1;
y=0;
return a;
}
ll r=exgcd(b,a%b,x,y);
ll t=x;
x=y;
y=t-(a/b)*y;
return r;
}
inline ll exCRT()
{
ll M=mod[1],A=rem[1],t,d,x,y;
for(register ll i=2;i<=n;++i)
{
d=exgcd(M,mod[i],x,y);
if((rem[i]-A)%d)return -1;
t=mod[i]/d;
x=(mul(x,(rem[i]-A)/d,t)%t+t)%t;
ll tmp=M;M=M/d*mod[i];
A=(mul(tmp,x,M)+A)%M;;
}
A=(A%M+M)%M;
while(A<lm)A+=M;
return A;
}
inline void solve()
{
lm=0;
memset(rem,0,sizeof(rem));
memset(mod,0,sizeof(mod));
for(register int i=1;i<=n;++i)
{
if(*S.begin()>=h[i])k[i]=*S.begin(),S.erase(S.begin());
else
{
std::multiset<ll>::iterator it=--S.upper_bound(h[i]);
k[i]=*it,S.erase(it);
}
S.insert(v[i]);
}
bool mk=1;
for(register int i=1;i<=n;++i)
{
ll x,y,a=k[i],b=p[i],c=h[i],d=exgcd(a,b,x,y);
if(p[i]==1)chkmax(lm,(h[i]+k[i]-1)/k[i]);
else mk=0;
if(c%d)
{
puts("-1");
return ;
}
mod[i]=p[i]/d,rem[i]=mul(x,c/d,mod[i]);
if(!rem[i])chkmax(lm,mod[i]);
}
if(mk)write(lm,'\n');
else write(exCRT(),'\n');
}
int main()
{
read(T);
while(T--)
{
read(n);read(m);S.clear();
for(register int i=1;i<=n;++i)read(h[i]);
for(register int i=1;i<=n;++i)read(p[i]);
for(register int i=1;i<=n;++i)read(v[i]);
for(register int i=1,x;i<=m;++i)read(x),S.insert(x);
solve();
}
return 0;
}
【刷题】BZOJ 5418 [Noi2018]屠龙勇士的更多相关文章
- BZOJ 5418: [Noi2018]屠龙勇士 EXCRT+multiset
题解:求解形如 $A[i]ans\equiv b[i](mod$ $p[i])$ 的 $x$ 的最小正整数解. 考虑只有一个等式,那么可以直接化成 $exgcd$ 的形式:$A[i]ans+p[i]y ...
- uoj396 [NOI2018]屠龙勇士
[NOI2018]屠龙勇士 描述 小 D 最近在网上发现了一款小游戏.游戏的规则如下: 游戏的目标是按照编号 1∼n 顺序杀掉 n 条巨龙,每条巨龙拥有一个初始的生命值 ai .同时每条巨龙拥有恢复能 ...
- BZOJ5418[Noi2018]屠龙勇士——exgcd+扩展CRT+set
题目链接: [Noi2018]屠龙勇士 题目大意:有$n$条龙和初始$m$个武器,每个武器有一个攻击力$t_{i}$,每条龙有一个初始血量$a_{i}$和一个回复值$p_{i}$(即只要血量为负数就一 ...
- P4774 [NOI2018]屠龙勇士
P4774 [NOI2018]屠龙勇士 先平衡树跑出打每条龙的atk t[] 然后每条龙有\(xt \equiv a[i](\text{mod }p[i])\) 就是\(xt+kp[i]=a[i]\) ...
- [洛谷P4774] [NOI2018]屠龙勇士
洛谷题目链接:[NOI2018]屠龙勇士 因为markdown复制过来有点炸格式,所以看题目请戳上面. 题解: 因为杀死一条龙的条件是在攻击\(x\)次,龙恢复\(y\)次血量\((y\in N^{* ...
- BZOJ_5418_[Noi2018]屠龙勇士_exgcd+excrt
BZOJ_5418_[Noi2018]屠龙勇士_exgcd+excrt Description www.lydsy.com/JudgeOnline/upload/noi2018day2.pdf 每次用 ...
- 洛谷 P4774 [NOI2018] 屠龙勇士
链接:P4774 前言: 交了18遍最后发现是多组数据没清空/ll 题意: 其实就是个扩中. 分析过程: 首先发现根据题目描述的选择剑的方式,每条龙对应的剑都是固定的,有查询前驱,后继(在该数不存在前 ...
- 洛谷P4774 BZOJ5418 LOJ2721 [NOI2018]屠龙勇士(扩展中国剩余定理)
题目链接: 洛谷 BZOJ LOJ 题目大意:这么长的题面,就饶了我吧emmm 这题第一眼看上去没法列出同余方程组.为什么?好像不知道用哪把剑杀哪条龙…… 仔细一看,要按顺序杀龙,所以获得的剑出现的顺 ...
- LOJ2721 [NOI2018] 屠龙勇士 【扩展中国剩余定理】
好久没写了,写一篇凑个数. 题目分析: 这题不难想,讲一下中国剩余定理怎么扩展. 考虑$$\left\{\begin{matrix}x \equiv a\pmod{b}\\ x \equiv c\pm ...
随机推荐
- MySQL数据库引擎、事务隔离级别、锁
MySQL数据库引擎.事务隔离级别.锁 数据库引擎InnoDB和MyISAM有什么区别 大体区别为: MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持.MyISAM类型的表强调的是性能 ...
- 【原创】标准HTTP请求工具类
以下是个人在项目开发过程中,总结的Http请求工具类,主要包括四种: 1.处理http POST请求[XML格式.无解压]: 2.处理http GET请求[XML格式.无解压]: 3.处理http P ...
- Unity Shader 学习之旅
Unity Shader 学习之旅 unityshader图形图像 纸上学来终觉浅,绝知此事要躬行 美丽的梦和美丽的诗一样 都是可遇而不可求的——席慕蓉 一.渲染流水线 示例图 Tips:什么是 GP ...
- SICP读书笔记 2.1
SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 ...
- Netty源码分析第1章(Netty启动流程)---->第1节: 服务端初始化
Netty源码分析第一章: Server启动流程 概述: 本章主要讲解server启动的关键步骤, 读者只需要了解server启动的大概逻辑, 知道关键的步骤在哪个类执行即可, 并不需要了解每一步的 ...
- LAXCUS大数据操作系统3.03版本发布,欢迎使用试用
LAXCUS大数据操作系统3.03正式发布,欢迎下载使用试用.LAXCUS大数据操作系统,集成虚拟化.大数据.数据库.容器.中间件的多集群多用户多任务全栈通用系统软件,运行.开发.维护管理为一体的平台 ...
- Kubernetes探索学习002--Kubernetes的基本使用
Kubernetes 的基本使用方法 原则:使用YAML文件描述你要部署的API对象! 以部署nginx静态站点为例,具体操作及内容如下 1.编写YAML文件 [root@kubernetes01 ~ ...
- 一个基于NodeJS开发的APP管理CMS系统
花了大概3周独立开发了一个基于NodeJS的CMS系统,用于公司APP的内容管理( **公司APP?广告放在最后 ^_^ ** ,管理员请理解~~~ )晚上看了部电影还不想睡,闲着也是闲着就作下小小总 ...
- 使用sass与compass合并雪碧图(二)
上一篇文章介绍了怎样使用compass合并雪碧图,生成的icons.css文件中单位是px,PC端可以直接在html文件中使用,但在移动端,我们需要根据不同分辨率的屏幕,来缩放图片大小,显然使用px单 ...
- Alpha阶段展示报告
一.团队成员简介与个人博客地址 江昊,项目经理 http://www.cnblogs.com/haoj/ 王开,后端开发 http://www.cnblogs.com/wk1216123/ 王春阳,后 ...