熱門文章

2025年9月4日 星期四

ZeroJudge 解題筆記:d584. 技能點數skill

作者:王一哲
日期:2025年9月4日


ZeroJudge 題目連結:d584. 技能點數skill

解題想法


依照職業及當時的等級更新技能點數即可。

Python 程式碼


使用時間約為 20 ms,記憶體約為 3.4 MB,通過測試。
import sys

result = []
lines = sys.stdin.readlines()
for line in lines:
    job, level = map(int, line.split())
    tot = 0
    if job == 2 and level >= 8:  # 如果是法師,8 級一轉
        tot += 1 + (level-8)*3  # 點數加上轉職的 1 及每升一級加的 3 點
    elif (job == 1 or job == 3 or job == 4) and level >= 10:  # 如果是劍士、弓箭手、盜賊,10 級一轉
        tot += 1 + (level-10)*3  # 點數加上轉職的 1 及每升一級加的 3 點
    if job != 0 and level >= 30: tot += 1  # 如果不是初心者,30 級二轉,點數加 1
    if job != 0 and level >= 70: tot += 1  # 如果不是初心者,70 級三轉,點數加 1
    if job != 0 and level >= 120: tot += 3  # 如果不是初心者,120 級四轉,點數加 3
    result.append(f"{tot:d}\n")
sys.stdout.write("".join(result))


C++ 程式碼


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

int main() {
    int job, level;
    while(scanf("%d %d", &job, &level) != EOF) {
        int tot = 0;
        if (job == 2 && level >= 8) {  // 如果是法師,8 級一轉
            tot += 1 + (level-8)*3;  // 點數加上轉職的 1 及每升一級加的 3 點
        } else if ((job == 1 || job == 3 || job == 4) && level >= 10) {  // 如果是劍士、弓箭手、盜賊,10 級一轉
            tot += 1 + (level-10)*3;  // 點數加上轉職的 1 及每升一級加的 3 點
        }
        if (job != 0 && level >= 30) tot++;  // 如果不是初心者,30 級二轉,點數加 1
        if (job != 0 && level >= 70) tot++;  // 如果不是初心者,70 級三轉,點數加 1
        if (job != 0 && level >= 120) tot += 3;  // 如果不是初心者,120 級四轉,點數加 3
        printf("%d\n", tot);
    }
    return 0;
}


沒有留言:

張貼留言