单位

来源:互联网 发布:淘宝三木社的衣服好吗 编辑:程序博客网 时间:2024/04/19 10:08
#include <vector>
#include <cmath>
#include <iostream>


using namespace std;


int main()
{
    int n, a, b;
    cin >> n >> a >> b;
    vector<int> hp(n+1);
    for (int i = 1; i <= n; ++i)
        cin >> hp[i];
    
    int res = 0;
    int fireCnt = ceil((hp[1]+1)/b);
    res += fireCnt;
    
    hp[2] -= a*fireCnt;
    hp[3] -= a*fireCnt;
    hp[3] = max(hp[3], -1);
    
    vector<int> fireNum(fireCnt, 2);
    
    for (int i = 2; i < n; )
    {
        if (hp[i] < 0) {++i; continue;} //fireTo died
        int harmFireToi = min(a, hp[i]+1) + min(b, hp[i+1]+1);
        int harmFireToiplus1 = min(a, hp[i+1]+1) + min(b, hp[i]+1) + min(b, hp[i+2]+1);
        if (harmFireToi >= harmFireToiplus1) //fire to i
        {
            res++;
            hp[i] = max(hp[i]-a, -1);
            hp[i+1] = max(hp[i+1]-b, -1);
            fireNum.push_back(i);
        }
        else //fire to i+1
        {
            res++;
            hp[i] = max(hp[i]-b, -1);
            hp[i+1] = max(hp[i+1]-a, -1);
            hp[i+2] = max(hp[i+2]-b, -1);
            fireNum.push_back(i+1);
        }
    }
    
    int hpOfnMinus1 = max(-1, hp[n-1]);
    
    int hpOfn = max(-1, hp[n]);
    //cout << hpOfnMinus1 << " " << hpOfn << endl;
    //int fireTonMinus1 = max(ceil((hpOfnMinus1+1)/a), ceil((hpOfn)/b));
    int fireTonMinus1 = ceil((hpOfn+1)/b);
    res += fireTonMinus1;
    
    
    for (int i = 0; i < fireTonMinus1; ++i)
        fireNum.push_back(n-1);
    cout << res << endl;
    
    int sz = fireNum.size();
    for (int i = 0; i < sz; ++i)
        cout << fireNum[i] << " ";
    return 0;
    
}
0 0