熱門文章

2025年1月28日 星期二

ZeroJudge 解題筆記:e622. 3. 虛擬寵物大師 (Master)

作者:王一哲
日期:2025年1月28日



ZeroJudge 題目連結:e622. 3. 虛擬寵物大師 (Master)

解題想法


這題是迴圈的練習題,將 IV 值對應的 CP 值、升級後的 CP 值另外寫成函式,這樣程式碼比較好看。

Python 程式碼


使用時間約為 38 ms,記憶體約為 3.8 MB,通過測試。
# 輸入 iv 值,回傳升級時增加的 cp 值
def ivcp(iv):
    if 0 <= iv <= 29: return 10
    elif 30 <= iv <=39: return 50
    else: return 100

# 輸入原有的星塵沙子數量 star,iv 值、原來的 cp 值,計算升級後的 cp 值
def upgrade(star, iv, cp):
    while star >= 1000:
        star -= 1000
        cp += ivcp(iv)
    return cp

# 解題過程
n, s = map(int, input().split())  # 寵物數量 n,原有的星塵沙子數量 s
imax, idx = 0, 0  # 升級後最高的 cp 值及寵物編號
for i in range(1, n+1):  # 讀取 n 行資料
    c, v = map(int, input().split())  # 讀取原來的 cp 值、iv 值
    re = upgrade(s, v, c)  # 呼叫 upgrade,代入 s, v, c,計算升級後的 cp 值
    if re > imax:  # 如果 re 大於 imax
        imax = re  # 更新 imax
        idx = i  # 更新 idx
print(f"{idx:d} {imax:d}")  # 印出答案


C++ 程式碼


使用時間約為 2 ms,記憶體約為 360 kB,通過測試。
#include <iostream>
using namespace std;

/* 輸入 iv 值,回傳升級時增加的 cp 值 */
int ivcp(int iv) {
    if (iv >= 0 && iv <= 29) return 10;
    else if (iv >= 30 && iv <=39) return 50;
    else return 100;
}

/* 輸入原有的星塵沙子數量 star,iv 值、原來的 cp 值,計算升級後的 cp 值 */
int upgrade(int star, int iv, int cp) {
    while(star >= 1000) {
        star -= 1000;
        cp += ivcp(iv);
    }
    return cp;
}

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    int n, s; cin >> n >> s;  // 寵物數量 n,原有的星塵沙子數量 s
    int imax = 0, idx = 0;  // 升級後最高的 cp 值及寵物編號
    for(int i=1; i<=n; i++) {  // 讀取 n 行資料
        int c, v; cin >> c >> v;  // 讀取原來的 cp 值、iv 值
        int re = upgrade(s, v, c);  // 呼叫 upgrade,代入 s, v, c,計算升級後的 cp 值
        if (re > imax) {  // 如果 re 大於 imax
            imax = re;  // 更新 imax
            idx = i;  // 更新 idx
        }
    }
    cout << idx << " " << imax << "\n";  // 印出答案
    return 0;
}


沒有留言:

張貼留言