結果
| 問題 | No.3677 Global Checksum |
| コンテスト | |
| ユーザー |
harurun
|
| 提出日時 | 2026-08-11 04:29:34 |
| 言語 | PyPy3 (7.3.23) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,143 bytes |
| 記録 | |
| コンパイル時間 | 248 ms |
| コンパイル使用メモリ | 96,340 KB |
| 実行使用メモリ | 200,384 KB |
| 最終ジャッジ日時 | 2026-09-04 22:18:59 |
| 合計ジャッジ時間 | 5,270 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge1_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 12 TLE * 5 -- * 3 |
ソースコード
import sys
from __pypy__ import builders, utf8content
MASK = 0xFFFFFFFF
def main():
rd = sys.stdin.buffer
H, W = map(int, rd.readline().split())
data = rd.read()
# H == 1:
# S1 == T なので C1 == 2*S1 (mod 2^32)
if H == 1:
num = 0
s = 0
for c in data:
if c >= 48:
num = num * 10 + c - 48
else:
s += num
num = 0
s += num
sys.stdout.buffer.write(
utf8content(str((s << 1) & MASK))
)
return
S = [0] * H
# W == 1 では row_sum と c == 10 の判定が不要
if W == 1:
r = 0
num = 0
total = 0
for c in data:
if c >= 48:
num = num * 10 + c - 48
else:
S[r] = num
total += num
r += 1
num = 0
if r < H:
S[r] = num
total += num
else:
# ここは現在最速のコードをそのまま維持
r = 0
num = 0
row_sum = 0
total = 0
for c in data:
if c >= 48:
num = num * 10 + c - 48
elif c == 10:
row_sum += num
S[r] = row_sum
total += row_sum
r += 1
num = 0
row_sum = 0
else:
row_sum += num
num = 0
if r < H:
row_sum += num
S[r] = row_sum
total += row_sum
T = total & MASK
# 最大10桁 + '\n' = 11 bytes / 行
#
# PyPy 7.3.23 の StringBuilder(size) は
# 内部 Utf8StringBuilder に 3*size を渡す。
# したがって ceil(11H/3) を指定すれば十分。
out = builders.StringBuilder((11 * H + 2) // 3)
append = out.append
for s in S:
append(str((s + T) & MASK))
append('\n')
# sys.stdout.write() を通さず、
# StringBuilder の内部 UTF-8 表現を直接 bytes として出力
sys.stdout.buffer.write(utf8content(out.build()))
main()
harurun