日期: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;
}
沒有留言:
張貼留言