1. 程式人生 > 實用技巧 >洛谷-P2006 趙神牛的遊戲

洛谷-P2006 趙神牛的遊戲

洛谷-P2006 趙神牛的遊戲

原題連結:https://www.luogu.com.cn/problem/P2006


題目描述

在 DNF 中,趙神牛有一個締造者,他一共有 \(k\) 點法力值,一共有 \(m\) 個技能,每個技能耗費的法力值為 \(a_i\),可以造成的傷害為 \(b_i\),而 boss 的體力值為 \(n\),請你求出它放哪個技能,才可以打死 boss。

當然,趙神牛技術很菜,他一局只放一個技能,不過每個技能都可以放無數次。

輸入格式

第一行有三個整數,分別表示 \(k,m,n\)

後面 \(m\) 行,每行兩個整數,第 \((i + 1)\)

行的整數表示耗費的法力值 \(a_i\) 和造成的傷害 \(b_i\)

輸出格式

輸出僅一行,既可以殺死 boss 的技能序號,如果有多個,按從小到大的順序輸出,中間用一個空格隔開;如果沒有技能能殺死 boss,輸出 -1

輸入輸出樣例

輸入 #1

100 3 5000
20 1000
90 1
110 10000

輸出 #1

1

輸入 #2

50 4 10
60 100
70 1000
80 1000
90 0

輸出 #2

-1

說明/提示

資料規模與約定

對於全部的測試點,滿足:

  • \(0\le n,m,k\le 3\times 10^4\),
  • \(1 \leq a_i,b_i\le 2147483647\)

C++程式碼

#include <iostream>
#include <cmath>
using namespace std;

int main() {
    int k, m, n, j=0;
    cin >> k >> m >> n;
    int a[m], b[m], ans[m];
    for (int i=0; i<m; ++i)
        cin >> a[i] >> b[i];
    for (int i=0; i<m; ++i)
        if (ceil(n*1.0/b[i])*a[i] <= k)
            ans[j++] = i + 1;
    if (j == 0)
        cout << -1;
    for (int i=0; i<j; ++i)
        cout << ans[i] << ' ';
    cout << endl;
    return 0;
}