P4774 [NOI2018] 屠龙勇士

P4774 [NOI2018]屠龙勇士(exCRT) P4774 [NOI2018]屠龙勇士(exCRT) 题目链接:传送门 思路: ​ 首先根据题意我们可以算出来对于每一条龙使用的武器攻击力(这个使用set和upper_bound成员函数很容易实现)。 ​ 现在我们价假设第 i​i​i​ 条龙的生命值为h[i]​h[i]​h[i]​,恢复能力为p[i]​p[i]​p[i]​,此时使用的武器攻击力为g[i]​g[i]​g[i]​, 那么我们攻击次数x... 阅读详情

Label

EXCRT的简单变式(解标准线性同余方程组)+multiset实现普通平衡树功能

Description

https://www.luogu.com.cn/problem/P4774

Solution

首先,由于小D按1∼n1\sim n1∼n顺序屠龙,故我们用一个multiset动态维护SSS(SSS:剑的攻击力),根据题意,面对第iii条巨龙时,我们查询可重集内aia_iai​的前驱并作为SiS_iSi​(屠第iii条龙所用剑的攻击力),若aia_iai​无前驱则令Si=aiS_i=a_iSi​=ai​的后继。

当我们求出所有SiS_iSi​后,将题意转化为数学语言即为:求最小的x≥maxi=1n⌈aisi⌉x\ge max_{i=1}^{n}\lceil\frac{a_i}{s_i}\rceilx≥maxi=1n​⌈si​ai​​⌉,使如下标准线性同余方程组成立:
​ {s1x≡a1(modp1)s2x≡a2(modp2)......snx≡an(modpn)\begin{cases}s_1x\equiv a_1(modp_1)\\s_2x\equiv a_2(modp_2)\\......\\s_nx\equiv a_n(modp_n)\end{cases}⎩⎪⎪⎪⎨⎪⎪⎪⎧​s1​x≡a1​(modp1​)s2​x≡a2​(modp2​)......sn​x≡an​(modpn​)​

(特判:由于我们必须把每一条龙的血量变成非正数后龙才会回血,故有上面xxx的取值范围)

虽然相比于EXCRTEXCRTEXCRT的标准形式,每一个线性同余方程前多了一个系数sis_isi​,但类比EXCRTEXCRTEXCRT的推导过程,我们仍不难得出解该方程组的一般方法:

设前i−1i-1i−1个方程的通解为x0+tPi−1x_0+tP_{i-1}x0​+tPi−1​(P=lcm(p1gcd(p1,s1),p2gcd(p2,s2)...pi−1gcd(pi−1,si−1)))(P=lcm(\frac{p_1}{gcd(p_1,s_1)},\frac{p_2}{gcd(p2,s_2)}...\frac{p_{i-1}}{gcd(p_{i-1},s_{i-1})}))(P=lcm(gcd(p1​,s1​)p1​​,gcd(p2,s2​)p2​​...gcd(pi−1​,si−1​)pi−1​​))(此处注意:根据EXCRTEXCRTEXCRT内通解的推导及gcd(si,pi)∣sigcd(s_i,p_i)|s_igcd(si​,pi​)∣si​,我们可得pi∣sipigcd(si,pi)p_i|\frac{s_ip_i}{gcd(s_i,p_i)}pi​∣gcd(si​,pi​)si​pi​​,故此处通解形式与EXCRTEXCRTEXCRT不同)则:对于第iii个同余方程six≡ai(modpi)s_ix\equiv a_i(modp_i)si​x≡ai​(modpi​),∃t[si(x0+tPi−1)≡ai(modpi)]\exist t[s_i(x_0+tP_{i-1})\equiv a_i(modp_i)]∃t[si​(x0​+tPi−1​)≡ai​(modpi​)]即说明前iii个同余方程组有解,反之则无解。

将si(x0+tP)≡ai(modpi)s_i(x_0+tP)\equiv a_i(modp_i)si​(x0​+tP)≡ai​(modpi​)化成二元一次不定方程的形式:

six0+sitPi−1≡ai(modpi)s_ix_0+s_itP_{i-1}\equiv a_i(modp_i)si​x0​+si​tPi−1​≡ai​(modpi​)

​siPi−1t+six0=piu+ais_iP_{i-1}t+s_ix_0= p_iu+a_isi​Pi−1​t+si​x0​=pi​u+ai​

​siPi−1t+piu=ai−six0s_iP_{i-1}t+p_iu=a_i-s_ix_0si​Pi−1​t+pi​u=ai​−si​x0​

据Bézout定理,若gcd(siPi−1,pi)∤ai−six0gcd(s_iP_{i-1},p_i)\nmid a_i-s_ix_0gcd(si​Pi−1​,pi​)∤ai​−si​x0​,则原方程组无解,反之即用EXCGD解出上述方程的一组特解t0,u0t_0,u_0t0​,u0​,ttt的通解即可表示为t=t0+kpigcd(siPi−1,pi)t=t_0+k\frac{p_i}{gcd(s_iP_{i-1},p_i)}t=t0​+kgcd(si​Pi−1​,pi​)pi​​。

求出ttt后,前iii个方程组的解ansi=x0+tPi−1+kPians_i=x_0+tP_{i-1}+kP_iansi​=x0​+tPi−1​+kPi​。将此过程归纳即为求方程组解的一般过程。

最后,注意面对第111条龙时诸变量的取值。

总结:1、注重每一步推导过程的准确性;

​ 2、注意特判情况; 3、留意炸精度的地方并适当使用慢速乘。

Code

毕竟此题是近几年NOI的D2T1,故需要注意的细节不在少,详见如下代码。

#include<cstdio>
#include<iostream>
#include<set>
#define ll long long
using namespace std;

const int MAXN=2e5;
int T,N,M;
ll ai[MAXN],pi[MAXN],fsts[MAXN],gives,si[MAXN];
ll atktot,maxatk,atkstep,A,B,C,ans,P,Pi,G,x,y,xi,yi;
multiset<ll>S;

ll Max(ll a,ll b) { return ((a>b)?(a):b); }
ll Gcd(ll a,ll b) { return ((b==0)?a:Gcd(b,a%b)); }
ll Lcm(ll a,ll b) { return (a/Gcd(a,b))*b; }
ll Msc(ll a,ll b,ll MOD)
{
	ll tot=0;
	for(;b;b>>=1,a=(a+a)%MOD)
		if(b&1)	tot=(tot+a)%MOD;
	return tot;
}

void Exgcd(ll a,ll b)
{
	if(b==0) { x=1,y=0; return; }
	Exgcd(b,a%b);
	xi=x,yi=y;
	x=yi,y=xi-(a/b)*yi;
}

ll Excrt()
{
	ans=0LL; P=1LL; maxatk=0LL;
	for(int i=1;i<=N;++i)
	{
		atktot=ai[i]/si[i];
		if(ai[i]%si[i]>0)	++atktot;
		maxatk=Max(maxatk,atktot);//此三句:判断至少需攻击maxatk次(因为最后线性同余方程的解有可能小于maxatk,不合法) 
		A=si[i]*P,B=pi[i],C=ai[i]-si[i]*ans;
		G=Gcd(A,B);
		if(G<0)	G=-G;//便于使用第一次慢速乘 
		if(C%G!=0)	return -1;
		Exgcd(A,B);
		x=(x%(B/G)+(B/G))%(B/G);//将x变为正数便于Msc 
		x=(Msc(C/G,x,(B/G))+(B/G))%(B/G);//注意:ax+by=c通解形式下步长与ax+by=g一致!(此处会爆longlong,需龟速乘) 
		if(x==0)	x=B/G;//x不能为0 
		Pi=Lcm(P,B/Gcd(B,si[i]));//注意:通解不再是X0+kLcm(p1,p2...pn) 
		if(i==1)	ans=x;
		else	ans=(ans+Msc(P,x,Pi))%Pi;
		P=Pi;
		ans=(ans%P+P)%P;
		if(ans==0)	ans=P;//ansx不能为0且不能小于将每条龙砍成负血的最小刀数
	}
	if(ans<maxatk)//特判 
	{
		atkstep=(maxatk-ans)/P;
		ans+=atkstep*P;
		if((maxatk-ans)%P>0)	ans+=P;
	}
	return ans;
}

void work()
{
	S.clear();
	scanf("%d%d",&N,&M);
	for(int i=1;i<=N;++i)	scanf("%lld",&ai[i]);
	for(int i=1;i<=N;++i)	scanf("%lld",&pi[i]);
	for(int i=1;i<=N;++i)	scanf("%lld",&fsts[i]);
	for(int i=1;i<=M;++i)
	{
		scanf("%lld",&gives);
		S.insert(gives);
	}
	for(int i=1;i<=N;++i)
	{
		if(S.upper_bound(ai[i])!=S.begin())	si[i]=*--S.upper_bound(ai[i]);
		else	si[i]=*S.upper_bound(ai[i]);
		S.erase(S.find(si[i]));
		S.insert(fsts[i]);
	}
	cout<<Excrt()<<'\n';
}

int main()
{
	scanf("%d",&T);
	for(int i=1;i<=T;++i)	work();
	return 0;
}
生存网络与mlr3proba 通过结合生存网络和mlr3proba,可以使用生存网络模型来预测个体在给定时间点发生事件的概率,并使用mlr3proba提供的工具进行模型的训练、评估和选择最佳模型。iii)基本的机器学习(ML)方法,如重新排序和调整。在本文中,我们将只讨论前五种,因为它们在文献中得到了更好的建立,并且它们具有相同的接口,这简化了调优,我们将在下面看到。我们不会为模型指定自定义架构,而是使用默认架构,如果你熟悉PyTorch,那么你可以选择创建自己的架构,如果你愿意的话,通过将其传递给模型中的custom_net参数。 阅读详情

相关推荐

基于java实现的弹幕视频网站

开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:Maven3.3.9系统展示弹幕视频网站,在弹幕视频网站可以查看首页、视频信息、商品信息、论坛信息、我的、跳转到后台、购物车、客服等内容前台首页界面图登录,通过登录填写账号、密码等信息进行登录操作登录界面图视频信息界面图。

DC5621的博客 1332

【题解】Luogu-P4774 [NOI2018] 屠龙勇士

与恶龙缠斗过久,自身亦成为恶龙。凝视深渊过久,深渊将回以凝视。 ​ ——尼采《善恶的彼岸》 P4774 [NOI2018] 屠龙勇士 Description\text{Description}Description 玩家需要按照编号 1→n1 \to n1→n 顺序杀掉 nnn 条巨龙,每条巨龙拥有一个初始的生命值 bib_ibi​。同时每条巨龙拥有恢复能力,会使它的生命值每次增加 aia_iai​,直至生命值非负。 游戏开始时玩家拥有 mmm 把剑,每.

mango09の世界 353

从永恒之蓝看内网安全:企业如何用Nmap+MSF快速检测445端口风险

本文探讨了企业如何利用Nmap和Metasploit快速检测445端口风险,防范永恒之蓝(MS17-010)漏洞攻击。通过分阶段检测流程和自动化工具组合,企业可高效识别内网风险主机,并实施紧急隔离与长效防护策略,提升整体网络安全防护能力。

weixin_30772105的博客 599

P4774 [NOI2018]屠龙勇士

昨天晚上快走时看了这题:不是exgcd+excrt吗? 旁边张大佬默默看了我一眼(觉得我会死) 然后于是我今天中午才调出来Orz 思路:exgcd+excrt 提交:5次 错因:龟速乘传进去了负数,并且用的int;之前写过的excrt的板子有问题 题解: 先要特判一种情况:若 \(p[i]=1\) ,答案显然就是 \(\max(\lceil\frac{a[i]}{stk[i]}\rce...

176

html2canvas 返回的toDataURL()数据为 data:,的解决方法

html2canvas 返回的toDataURL()数据为 data:,的解决方法 我在使用html2canvas的使用, 发现toDataURL() 返回的数据为data:, 而且将数据设置为img的src属性,图片也不能正常显示,我尝试了很多方法,也没有解决出来,经过我不断的百度+自己尝试,终于解决了这个问题。 代码: 这段代码是没有任何问题的,标准html2canvas的demod代码,但就是无法正常将图片previewImg 渲染出来,dataURL 我打印的结果为 data:, 错误的原因是,

java123_PB的博客 5024

231003-四步MacOS-iPadOS设置无线竖屏随航SideCar

新建虚拟屏幕参考文献。

专注机器学习之路 7485

P4774-[NOI2018]屠龙勇士【EXCRT】

正题 题目链接:https://www.luogu.com.cn/problem/P4774 题目大意 nnn个龙血量为aia_iai​,回复能力为pip_ipi​,死亡后掉落剑的攻击力tit_iti​,mmm把剑,攻击力为bib_ibi​。 从111开始打,每次使用不大于当前龙血量的剑中攻击力最低的一把(没有就用攻击力最低的),造成x×atkx\times atkx×atk点伤害,然后当前的剑坏掉。 求一个最小的xxx使得所有龙被攻击后血量是pip_ipi​的倍数。 1≤n,m≤1051\leq n,m

QuantAsk 373

内网开发必备:5分钟搞定WSL2离线安装(含Ubuntu迁移避坑指南)

本文详细介绍了在内网环境下快速完成WSL2离线安装的完整流程,包括系统兼容性检查、Linux内核更新包安装以及Ubuntu镜像的离线部署。特别针对外网Ubuntu环境迁移至内网时的用户权限、系统路径等常见问题提供了实用解决方案,帮助开发者高效搭建Linux开发环境。

weixin_29255731的博客 402

[洛谷P4774] [NOI2018]屠龙勇士

洛谷题目链接:[NOI2018]屠龙勇士 因为markdown复制过来有点炸格式,所以看题目请戳上面. 题解: 因为杀死一条龙的条件是在攻击\(x\)次,龙恢复\(y\)次血量\((y\in N^{*})\)后龙的血量恰好为\(0\).那么根据题意我们可以列出方程: \[atk_i*x\equiv hp_i(mod \ p_i)\] 这个形式是不是很像中国剩余定理的形式:\(x\equ...

dengtun2502的博客 186

嵌入式系统存储体系

主要分为三种:高速缓存(cache)、主存和外存。

weixin_43586667的博客 2265

jira的详细使用教程

​jira的详细使用教程,1,Jira- 是一款缺陷管理软件工具,用其进行缺陷的管理和跟踪。(是B/S架构的软件) 2,主要涉及的角色: 3,具体工作流 添加工作流 1.点击项目设置

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 3295

P4774 [NOI2018]屠龙勇士(exCRT,multiset)

P4774 [NOI2018]屠龙勇士 本题做题思路参考 @shadowice1984的题解 简要题意 有nnn条巨龙和mmm把剑,每条巨龙有aia_iai​的初始生命值,有pip_ipi​的恢复能力. 一条巨龙被杀死当且仅当其受到的伤害使其剩余血量恰好为000或者在任意次恢复后恰好为000. 而每次拿来杀巨龙的剑也有要求: 1.1 .1. 优先选择当前拥有的,攻击力不高于巨龙初始生命值中攻击力最...

仙都一普通市民的blog 275

置顶必读(1) |《YOLOv11实战:从入门到深度优化》专栏导读,带你一文了解本专栏!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏,该专栏专注于分享我在YOLOv8目标检测模型中的实战经验,涵盖从入门基础到深度优化的全方位解决方案。无论你是计算机视觉的新手,还是具有多年深度学习经验的专家,本专栏都将为你提供高效、可复现的技术方案,助你掌握YOLOv8的核心技术,提升目标检测性能,突破瓶颈,优化模型,并加速项目开发🚀!

**My Coding Family** 12万+

luogu P4774 [NOI2018]屠龙勇士

传送门 这题真的是送温暖啊qwq,而且最重要的是yyb巨佬在Day2前几天正好学了crt,还写了博客 然而我都没仔细看,结果我就同步赛打铁了QAQ 我们可以先根据题意,使用set维护,求出每次的攻击力 然后对于一条龙,要使得砍到生命值能加到0,那么 攻击力\(a_i\) * 次数\(x\) 要和 血量\(b_i\) 在膜 回复量\(p_i\) 意义下同余,也就是\(a_ix\equiv b_i\m...

weixin_30433075的博客 133

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

NOI2018/LuoGu P4774屠龙勇士

本蒟蒻终于屠龙成功!! 作为一个我的世界的资深玩家,对屠龙有着无比的信仰和热情!! 首先吐槽一下这只信息龙,它变成负HP后居然不会死,只有他自己回血回到了0HP才算死23333 来我们来看看题意描述,国赛的题意描述略长 这道题其实没有那么的可怕,当时我写完excrt就有学长推荐我来写 题目描述 小 D 最近在网上发现了一款小游戏。游戏的规则如下: • 游戏的目标是按照编号...

bangzuan5029的博客 163

【洛谷P4774】[NOI2018] 屠龙勇士【Excrt Exgcd】

linklinklink 分析: ExcrtExcrtExcrt 用multisetmultisetmultiset 就可以快速求出要用的剑了 除非你想写平衡树 问题转化成:::求同余方程组 {Atk1x≡Hp1 (mod p1)Atk2x≡Hp2 (mod p2)  ...Atknx≡Hpn (mod pn) \begin{cases} Atk_1x≡Hp_1~(mod~p_1)\\ Atk_2x≡Hp_2~(mod~p_..

绫 236

洛谷P4774 [NOI2018]屠龙勇士

传送门 题解 这题到底是什么东西……数学题太珂怕了…… 1 //minamoto 2 #include<iostream> 3 #include<cstdio> 4 #include<algorithm> 5 #include<set> 6 #define ll long long 7 #define GG ...

weixin_33769207的博客 109

洛谷P4774 [NOI2018]屠龙勇士 [扩欧,中国剩余定理]

传送门 思路 首先可以发现打每条龙的攻击值显然是可以提前算出来的,拿multiset模拟一下即可。 一般情况 可以搞出这么一些式子: \[ atk_i\times x=a_i(\text{mod}\ p_i) \] 简单处理一下就变成这样: \[ atk_i\times x +p_i \times y=a_i \] 显然可以扩欧搞出一组特解\((x',y')\),那么就有 \[ x=x...

dfn8726的博客 150
上一篇: CF1500B(Div.1) Two chandeliers
下一篇: P3306 [SDOI2013] 随机数生成器
guapi2333
博客等级 码龄9年 7粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值