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
");
            continue;
        }
        long long tt=a/(d*b);
        long long ans=(tt+1)*a-tt*(tt+1)/2*d*b;
        printf("%lld
",ans);
    }
}
原文地址:https://www.cnblogs.com/zhanglichen/p/13884764.html