zoukankan      html  css  js  c++  java
  • Codeforces 1435E/1434C Solo mid Oracle 数学

    Codeforces 1435E/1434C Solo mid Oracle

    题意

    你有一个技能,每次使用可以使敌方英雄的血量减少(a),并在(c)秒内每秒回复(b)点生命值,技能的冷却时间为(d)。问在你能击败的敌方英雄的血量最大为多少。

    分析

    img

    (a>b cdot c)时,怪物血量可以无限大,答案为(-1)

    (a<=bcdot c)时,只考虑使用技能的时间点(t),从图中可以分析出,当(t>=c)时,(d)秒内总回血量大于等于(bcdot c),回血大于等于(a)了,所以答案只可能在(t<c)的时刻取得,而(t<c)时,从图中能看出,每次施法造成的实际伤害为(a,a-bd,a-2bd,dots.a-kbd),所以我们只要找到最大的(k)使得(a-kbd>=0),答案即为(a(k+1)-frac{k(k+1)}{2}bd)

    Code

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int t;
    ll a,b,c,d;
    int main(){
        cin>>t;
        while(t--){
            cin>>a>>b>>c>>d;
            if(b*c<a){
                puts("-1");
                continue;
            }
            if(c<=d){
                cout<<a<<endl;
            }else{
                ll k=a/(d*b);
                ll ans=a*(k+1)-(1+k)*k/2*b*d;
                cout<<ans<<endl;
            }
        }
        return 0;
    }
    
  • 相关阅读:
    idea初始化配置
    常用网址
    linux改错了profile文件
    获得ip地址[转载]
    java 基本数据类型转换
    log4j配置概要
    HTTP状态码
    HTTP 的请求方式
    10、类和方法
    9、一切都是对象
  • 原文地址:https://www.cnblogs.com/xyq0220/p/13881139.html
Copyright © 2011-2022 走看看