CF1435E Solo mid Oracle(推柿子)
Meka-Naruto玩电脑游戏。他的角色具有以下能力:给予敌方英雄,对其立即造成伤害,然后在使用该技能之后的一秒内,在每秒结束时,准确地治疗敌人b的生命值,精确到c秒。这意味着,如果在时间t使用此能力,则由于此能力,敌人的生命值会在时间t减少a,然后在时间点t + 1,t + 2,...,t + c增加b。
该技能的冷却时间为d秒,即。 e。如果Meka-Naruto在时刻t使用它,那么下次他可以使用它的时间是t + d。请注意,他只能在整数时间使用该异能,因此对敌人生命值的所有更改也只会在整数时间发生。
该能力的不同使用可能会相互叠加。也就是说,当前处于k法术下的敌人这次获得的治疗量为k⋅b。另外,如果同时发生多个健康更改,则将它们全部计数一次。
现在,梅卡·纳鲁托想知道他是否可以通过在每次可能的时间内(即每d秒)仅使用该能力杀死敌人。如果敌人的生命值变为0或更低,就会被杀死。假设除了梅卡·火影忍者的性格能力之外,敌人的健康没有受到任何其他影响。敌人可以拥有多少点生命值,以使梅卡-鸣人能够杀死它们?
输入值
第一行包含一个整数t(1≤t≤105),代表测试用例的数量。
每个测试用例都用一行包含四个数字a,b,c和d(1≤a,b,c,d≤106)描述,这些数字分别表示即时损坏的数量,每秒的恢复量,恢复的数量和能力冷却。
输出量
如果技能可以杀死具有任意数量生命值的敌方英雄,则在单独的行中为每个测试用例打印-1,否则打印可以被杀死的敌人的最大生命值。
#include<bits/stdc++.h> using namespace std; long long a,b,c,d; int t; int main () { scanf("%d",&t); while (t--) { scanf("%lld%lld%lld%lld",&a,&b,&c,&d); if (a>b*c) { printf("-1\n"); continue; } long long tt=a/(d*b); long long ans=(tt+1)*a-tt*(tt+1)/2*d*b; printf("%lld\n",ans); } }