結果

問題 No.3677 Global Checksum
コンテスト
ユーザー harurun
提出日時 2026-08-11 04:29:34
言語 PyPy3
(7.3.23)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
TLE  
実行時間 -
コード長 2,143 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 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
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

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()
0