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