熱門文章

2025年1月29日 星期三

ZeroJudge 解題筆記:e623. 2. PPAP

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



ZeroJudge 題目連結:e623. 2. PPAP

解題想法


這題看起來好像不難,但是編號很容易算錯,尤其是某一輪或是某一組的最後一項。

Python 程式碼


使用時間約為 46 ms,記憶體約為 3.3 MB,通過測試。
n = int(input())  # 編號
m = 0  # 第 m 輪
s = 0  # 第 m 輪的數量,每次加 4
while n >= s+4:  # 如果 n 的數量大於等於 s+4,還有下一輸,繼續執行
    m += 1; s += 4  # m 加 1;s 加 4
    n -= s  # n 減去 s
if n == 0:  # 剛好是第 m 輪的最後一個人
    print("Pineapple pen")  # 印出 Pineapple pen
else:  # 要再到下一輪
    m += 1  # m 加 1
    if n%m == 0: n -= 1  # 如果 n 可以被 m 整除,剛好是某一項物品的最後一個,n 要減 1
    item = n // m  # 物品編號,取 n 除以 m 的整數部分
    if item == 0: print("Pen")  # 印出對應的物品名稱
    elif item == 1: print("Pineapple")
    elif item == 2: print("Apple")
    else: print("Pineapple pen")


C++ 程式碼


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

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    int n; cin >> n;  // 編號
    int m = 0, s = 0;  // 第 m 輪;第 m 輪的數量,每次加 4
    while(n >= s+4) {  // 如果 n 的數量大於等於 s+4,還有下一輸,繼續執行
        m++; s += 4;  // m 加 1;s 加 4
        n -= s;  // n 減去 s
    }
    if (n == 0) {  // 剛好是第 m 輪的最後一個人
        cout << "Pineapple pen\n";  // 印出 Pineapple pen
    } else {  // 要再到下一輪
        m++;  // m 加 1
        if (n%m == 0) n--;  // 如果 n 可以被 m 整除,剛好是某一項物品的最後一個,n 要減 1
        int item = n / m;  // 物品編號,取 n 除以 m 的整數部分
        if (item == 0) cout << "Pen\n";  // 印出對應的物品名稱
        else if (item == 1) cout << "Pineapple\n";
        else if (item == 2) cout << "Apple\n";
        else cout << "Pineapple pen\n";
    }
    return 0;
}


沒有留言:

張貼留言