一道细节毒瘤的签到题
题意
小D 最近在网上发现了一款小游戏。游戏的规则如下:
- 游戏的目标是按照编号$1 - n$ 顺序杀掉 $n$ 条巨龙,每条巨龙拥有一个初始的生命值 $a_i$ 。同时每条巨龙拥有恢复能力,当其使用恢复能力时,它的生命值就会每次增加 $p_i$ ,直至生命值非负。只有在攻击结束后且当生命值恰好为 $0$ 时它才会死去。
- 游戏开始时玩家拥有 $m$ 把攻击力已知的剑,每次面对巨龙时,玩家只能选择一把剑,当杀死巨龙后这把剑就会消失,但作为奖励,玩家会获得全新的一把剑。 小D觉得这款游戏十分无聊,但最快通关的玩家可以获得 ION2018 的参赛资格,于是小D决定写一个笨笨的机器人帮她通关这款游戏,她写的机器人遵循以下规则:
- 每次面对巨龙时,机器人会选择当前拥有的,攻击力不高于巨龙初始生命值中攻击力最大的一把剑作为武器。如果没有这样的剑,则选择攻击力最低的一把剑作为武器。
- 机器人面对每条巨龙,它都会使用上一步中选择的剑攻击巨龙固定的$x$次,使巨龙的生命值减少 $x \times ATK$ 。
- 之后,巨龙会不断使用恢复能力,每次恢复pi 生命值。若在使用恢复能力前或 某一次恢复后其生命值为0 ,则巨龙死亡,玩家通过本关。
那么显然机器人的攻击次数是决定能否最快通关这款游戏的关键。小 D 现在得知了每条巨龙的所有属性,她想考考你,你知道应该将机器人的攻击次数x设置为多少,才能用最少的攻击次数通关游戏吗?
当然如果无论设置成多少都无法通关游戏,输出$-1$即可。
思路
不难发现 每次使用的剑都是可以确定的
用priority_queue或者map或者set或者脑残地手写一个平衡树都可以在$logn$的时间内得到.
所以用$O(nlogn)$的时间得到所有的$swd_i,p_i,a_i$
我们的任务是解对于所有模方程组成立的 $x$.
似乎用一个EXCRT就好了,因为不保证$p_i$是质数,要用ex_gcd求逆元,特判负数情况.
如果用乘起来的CRT秒秒钟爆炸long long哦 用合并式的EXCRT似乎更加资瓷哦
中间爆long long导致我同步赛就只有25分了….炒鸡难受…
Code
1 | //my vegetable has exploded. :( |