洛谷P4774 BZOJ5418 LOJ2721 [NOI2018]屠龙勇士(扩展中国剩余定理)

题目链接: 洛谷 BZOJ LOJ 题目大意:这么长的题面,就饶了我吧emmm 这题第一眼看上去没法列出同余方程组。为什么?好像不知道用哪把剑杀哪条龙…… 仔细一看,要按顺序杀龙,所以获得的剑出现的顺序也是固定的。 那么如果能把所有龙杀死,就能模拟出哪把剑杀那条龙了。 (以下设所有除 外的数的最大值为 ) ? 不,发现这里用剑的限制实际上是给出一个上界,来用lower_bound的。 插入也不要太暴力。我们想到什么?手写平衡树multiset! 这一部分复杂度是 。 接下来就成了一个同余方程组:。 ( 表示攻击第 条龙的攻击力, 表示第 条龙的血量, 表示第 条龙的恢复能力) 但是好像没那么简单!有一些神奇的情况……要特判! 在考场上的话我肯定想不到特判任何东西 首先大家应该都知道,等价于 。 但是在这题中不行!你总不能把一头龙的血量凭空减少吧! 所以 时(题目描述中的特性1不满足时)怎么办? 我们发现不满足特性1的点都满足 ……也就是只要把他的血量打到小于0就赢了! 此时答案是 。 另外在所有 时我们解出来的解是0!什么神奇的气功? 所以这是答案是所有 的 。 至此所有特判结束。 我们一般的EXCRT同余方程组的形式是 。 但是这里有讨厌的 !更讨厌的是可能没有逆元,不能直接除过去! 我们来看看如何变形: 此时可以EXGCD解出 的最小正整数解 。 根据某定理(什么定理来着?)可得通解为 。 于是就变成了 。 这一部分复杂度为 。 接下来就是裸的EXCRT了! 这一部分复杂度为 。 等一下,还有一句提示没看到: 你所用到的中间结果可能很大,注意保存中间结果的变量类型。 突然慌张 冷静分析一下,我们在各种算法中模数都有可能超过int范围,要是一乘…… 那……只能上龟速乘了。时间复杂度是没变,但是常数的话…… 幸好不是wys的题,不然时限就是1s了 好吧,都说完了,上代码吧。 NOI2018D2T1_dragon(EXCRT) 终于啊……https://www.cnblogs.com/1000Suns/p/9608901.html
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信