熱門文章

2026年4月11日 星期六

ZeroJudge 解題筆記:d096. 00913 - Joana and the Odd Numbers

作者:王一哲
日期:2026年4月11日


ZeroJudge 題目連結:d096. 00913 - Joana and the Odd Numbers

解題想法


這題考數學。假設最後一項有 $n$ 項,則題目問的是第 $i$ 列($i = \frac{n+1}{2}$),此列最後一項 $$ a = \frac{[1 + 1 + 2 \times(i-1)] \times i}{2} $$ 最後 $3$ 項相加為 $(2a -1) \times 3 - 6$。 這題的測資 $n$ 有點大,用 C++ 解題時用 int 會溢位。

Python 程式碼


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

result = []
for line in sys.stdin:
    n = int(line)  # 最後一列有 n 項
    i = (n+1) // 2  # 第 i 列
    a = (1 + 1 + 2*(i-1)) * i // 2  # 第 i 列的最後 1 項
    result.append(f"{(a*2 - 1)*3 - 6:d}\n")  # 第 i 列最後 3 項相加
sys.stdout.write("".join(result))


C++ 程式碼


2025年7月27日測試,使用時間約為 2 ms,記憶體約為 80 kB,通過測試。2026年4月6日測試,使用時間約為 0 ms,記憶體約為 1.4 MB,通過測試。
#include <cstdio>
typedef unsigned long long LL;

int main() {
    LL n;  // 最後一列有 n 項
    while(scanf("%lld", &n) != EOF) {
        LL i = (n+1) / 2;  // 第 i 列
        LL a = (1 + 1 + 2*(i-1)) * i / 2;  // 第 i 列的最後 1 項
        printf("%lld\n", (a*2 - 1)*3 - 6);  // 第 i 列最後 3 項相加
    }
    return 0;
}


沒有留言:

張貼留言