Codeforce 1296 D. Fight with Monsters

有n個怪獸以及他們的血量h_i,A和B兩個人要殺死所有怪獸,他們的攻擊力分別爲a和b。對於每一個怪獸,A,B輪流攻擊,A總是先手,如果在A攻擊的過程中怪獸死亡,A得1分;在B攻擊的過程中怪獸死亡,A不得分。A可以跳過B攻擊的回合k次,就是這k次B不對怪獸進行攻擊,問A最多能得多少分。

h_i\left ( a+b \right )取模,這些血量讓A,B輪流攻擊,只有最後一回合才影響得分。

h_i mod = (a+b) 

c_i表示對於第i個怪獸,需要跳過多少B的回合A才能殺死他得分,c_i=ceil(h_i/a)-1

c_i從小到大排序,依次讓k-=c_i直到k<c_i即可。

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <string>
#include <vector>
#include <queue>
#include <map>
#include <cmath>
#include <set>
#define ms(a,b) memset(a,b,sizeof(a))
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
typedef double ab;
const int N=1e6+10;
// int h[N];
vector<int>res;
int main()
{
    int n,a,b,k,ans=0;
    cin>>n>>a>>b>>k;
    for(int i=0,h;i<n;i++)
    {
        cin>>h;
        h%=(a+b);
        if(h==0) h=a+b;
        res.push_back(ceil((double)h/a)-1);
    }
    sort(res.begin(),res.end());
    for(int i=0;i<res.size();i++)
    {
        if(res[i]<=k)
        {
            ++ans;
            k-=res[i];
        }
    }
    cout<<ans<<endl;
    //system("pause");
}

 

發佈了74 篇原創文章 · 獲贊 4 · 訪問量 5043
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章