Educational Codeforces Round 72 B. Zmei Gorynich(贪心)

链接:http://codeforces.com/contest/1217
来源:Educational Codeforces Round 72

在这里插入图片描述

  题意:有一个怪兽,你可以有n中方式去攻击他,一开始他有10个头,对于每一次攻击都可以是怪兽掉d个头,长出来h个头,问最少需要多少次攻击可以消灭怪兽(怪兽没有头即为消灭)。
  思路:我们可以贪心的选择攻击的方式,选择经过一次攻击消失的头最多的那一次攻击,每次都选择这种方式的攻击,知道怪兽的头的数量小于等于这一组最大的d即可,那么我们就可以得到 x - times*(d-h) ≤ mmax;即times ≥ ceil((x - mmax)/(d - h))。此外我们还要保证 x ≥ mmax(times ≥ 0),此时表示我们只用一次攻击就可以把怪兽消灭。

#include<bits/stdc++.h>
using namespace std;
 
typedef long long ll;
const int Max_n=1e2+10;
const int inf=0x3f3f3f3f;
 
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        int n,x;
        scanf("%d%d",&n,&x);
        int mmin=inf,d[Max_n],h[Max_n],mmax=0;
        for(int i=1;i<=n;i++){
            scanf("%d%d",&d[i],&h[i]);
            mmax=max(mmax,d[i]);
        }
        for(int i=1;i<=n;i++){
            if(mmax>=x) mmin=1;
            else{
                 if(h[i]>=d[i]) mmin=min(mmin,inf);
                else{
                    int times=ceil((double)(x-mmax)/(d[i]-h[i]));
                    //int ans=x-times*(d-h);
                    //cout<<"          "<<times<<endl;
                    mmin=min(mmin,times+1);
                }
            }
        }
        printf("%d\n",mmin==inf?-1:mmin);
    }
    return 0;
}
发布了166 篇原创文章 · 获赞 68 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_42217376/article/details/100666231