結果

問題 No.3677 Global Checksum
コンテスト
ユーザー harurun
提出日時 2026-08-11 04:48:19
言語 PyPy3
(7.3.23)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
TLE  
実行時間 -
コード長 5,313 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 291 ms
コンパイル使用メモリ 96,080 KB
実行使用メモリ 169,204 KB
最終ジャッジ日時 2026-09-04 22:19:52
合計ジャッジ時間 5,165 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 17 TLE * 3
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

import sys
import pypyjit
from __pypy__ import builders

pypyjit.set_param(
    threshold=200,
    trace_eagerness=20,
)

MASK = 0xFFFFFFFF


def main():
    data = sys.stdin.buffer.read()
    p = 0

    # H
    H = 0
    while True:
        c = data[p]
        p += 1
        if c < 48:
            break
        H = H * 10 + c - 48

    # W
    W = 0
    while True:
        c = data[p]
        p += 1
        if c < 48:
            break
        W = W * 10 + c - 48

    # 最終行末に改行がない場合だけ sentinel を追加
    if data[-1] >= 48:
        data += b'\n'

    S = [0] * H
    total = 0

    # W=1 は特に H が大きくなりうるので専用化
    if W == 1:
        r = 0

        while r < H:
            x = data[p] - 48
            p += 1

            c = data[p]
            p += 1
            if c >= 48:
                x = x * 10 + c - 48

                c = data[p]
                p += 1
                if c >= 48:
                    x = x * 10 + c - 48

                    c = data[p]
                    p += 1
                    if c >= 48:
                        x = x * 10 + c - 48

                        c = data[p]
                        p += 1
                        if c >= 48:
                            x = x * 10 + c - 48

                            c = data[p]
                            p += 1
                            if c >= 48:
                                x = x * 10 + c - 48

                                c = data[p]
                                p += 1
                                if c >= 48:
                                    x = x * 10 + c - 48

                                    c = data[p]
                                    p += 1
                                    if c >= 48:
                                        x = x * 10 + c - 48

                                        c = data[p]
                                        p += 1
                                        if c >= 48:
                                            x = x * 10 + c - 48

                                            c = data[p]
                                            p += 1
                                            if c >= 48:
                                                x = x * 10 + c - 48

                                                # 10桁なので次は必ず区切り
                                                p += 1

            S[r] = x
            total += x
            r += 1

    else:
        r = 0

        while r < H:
            row = 0
            j = 0

            while j < W:
                # 1桁目
                x = data[p] - 48
                p += 1

                # 2桁目
                c = data[p]
                p += 1
                if c >= 48:
                    x = x * 10 + c - 48

                    # 3桁目
                    c = data[p]
                    p += 1
                    if c >= 48:
                        x = x * 10 + c - 48

                        # 4桁目
                        c = data[p]
                        p += 1
                        if c >= 48:
                            x = x * 10 + c - 48

                            # 5桁目
                            c = data[p]
                            p += 1
                            if c >= 48:
                                x = x * 10 + c - 48

                                # 6桁目
                                c = data[p]
                                p += 1
                                if c >= 48:
                                    x = x * 10 + c - 48

                                    # 7桁目
                                    c = data[p]
                                    p += 1
                                    if c >= 48:
                                        x = x * 10 + c - 48

                                        # 8桁目
                                        c = data[p]
                                        p += 1
                                        if c >= 48:
                                            x = x * 10 + c - 48

                                            # 9桁目
                                            c = data[p]
                                            p += 1
                                            if c >= 48:
                                                x = x * 10 + c - 48

                                                # 10桁目
                                                c = data[p]
                                                p += 1
                                                if c >= 48:
                                                    x = x * 10 + c - 48

                                                    # A_ij <= 1e9 なので
                                                    # これ以上の桁はない
                                                    p += 1

                row += x
                j += 1

            S[r] = row
            total += row
            r += 1

    T = total & MASK

    # ここは現在最速だった実装を維持
    out = builders.StringBuilder(H * 4)
    append = out.append

    for s in S:
        append(str((s + T) & MASK))
        append('\n')

    sys.stdout.write(out.build())


main()
0