結果

問題 No.3677 Global Checksum
コンテスト
ユーザー macaroni5708
提出日時 2026-09-19 14:59:57
言語 Rust
(1.97.1 + proconio + num + itertools + ACL)
コンパイル:
/usr/bin/rustc_custom
実行:
./target/release/main
結果
AC  
実行時間 78 ms / 200 ms
+ 748µs
コード長 1,762 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 4,644 ms
コンパイル使用メモリ 193,784 KB
実行使用メモリ 45,320 KB
最終ジャッジ日時 2026-09-19 15:00:21
合計ジャッジ時間 21,150 ms
ジャッジサーバーID
(参考情報)
judge3_0 / judge5_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 20
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

use std::io::{Read, Write, BufWriter};

fn main() {
    // 1. 高速入力のために標準入力をすべてバイト配列としてメモリに読み込む
    let mut stdin = std::io::stdin();
    let mut buf = Vec::new();
    stdin.read_to_end(&mut buf).unwrap();
    
    let mut pos = 0;
    
    // バイト配列から u32 の数値をパースするクロージャ
    let mut next_u32 = || -> u32 {
        // 空白や改行をスキップ
        while pos < buf.len() && buf[pos] <= b' ' {
            pos += 1;
        }
        if pos >= buf.len() { return 0; }
        
        let mut res = 0u32;
        // 数字である間読み込み続ける
        while pos < buf.len() && buf[pos] > b' ' {
            // res = res * 10 + (byte - '0')
            res = res.wrapping_mul(10).wrapping_add((buf[pos] - b'0') as u32);
            pos += 1;
        }
        res
    };

    // H と W の取得
    let h = next_u32() as usize;
    let w = next_u32() as usize;

    // 各行のチェックサム S_i を保存する配列
    let mut s = vec![0u32; h];
    // 全体のチェックサム T
    let mut t = 0u32;

    // 各行の読み込みと S_i, T の計算
    for i in 0..h {
        let mut sum = 0u32;
        for _ in 0..w {
            let a = next_u32();
            // wrapping_add で自動的に mod 2^32 の計算を行う
            sum = sum.wrapping_add(a);
        }
        s[i] = sum;
        t = t.wrapping_add(sum);
    }

    // 2. 高速出力のために BufWriter を使用
    let stdout = std::io::stdout();
    let mut out = BufWriter::new(stdout.lock());

    // 各行の C_i を計算して出力
    for i in 0..h {
        let c = s[i].wrapping_add(t);
        writeln!(out, "{}", c).unwrap();
    }
}
0