結果
| 問題 | No.3677 Global Checksum |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-09-19 14:59:57 |
| 言語 | Rust (1.97.1 + proconio + num + itertools + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 78 ms / 200 ms |
| + 748µs | |
| コード長 | 1,762 bytes |
| 記録 | |
| コンパイル時間 | 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 |
ソースコード
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();
}
}