結果

問題 No.3677 Global Checksum
コンテスト
ユーザー めーらく
提出日時 2026-09-05 01:45:10
言語 C++23
(gcc 15.3.0 + boost 1.92.0)
コンパイル:
g++-15 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 106 ms / 200 ms
+ 798µs
コード長 2,000 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 1,017 ms
コンパイル使用メモリ 167,760 KB
実行使用メモリ 90,104 KB
最終ジャッジ日時 2026-09-05 01:45:26
合計ジャッジ時間 5,339 ms
ジャッジサーバーID
(参考情報)
judge4_0 / judge1_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 20
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

//https://qiita.com/nojima/items/57b9d39d7d73362ac883 参照
# include <cctype>
# include <cstdio>
# include <cstring>
# include <iostream>
# include <stdexcept>
# include <vector>
# include <unistd.h>
using namespace std;
class Scanner {
    vector<char> buffer;
    ssize_t n_written;
    ssize_t n_read;
    char *p;


public:
    Scanner(): buffer(1<<26) { do_read(); }//buffer,memory容量

    long long read_int() {
        //桁を積んでRETURNするやつ
        while(*p<'0') ++p;
        unsigned ret=0;
        while(*p>='0') ret=ret*10+(unsigned)(*p++-'0');
        return ret;
    }

private:
    void do_read() {
        size_t len=0;
        while(true){
            //容量ごとに読み込むやつらしい
            ssize_t r = read(0, &buffer[len], buffer.size()-len-1);
            if(r<=0) break;
            len+=r;
        }
        buffer[len]=0;//区切り
        p= &buffer[0];
    }

    inline int next_char() {
        ++n_read;
        if (n_read == n_written) { do_read(); }
        return current_char();
    }

    inline int current_char() {
        return (n_read == n_written) ? EOF : buffer[n_read];
    }
};

int main() {
    Scanner scanner;
    int h = scanner.read_int();
    int w = scanner.read_int();
    unsigned int sum = 0;
    vector<unsigned int> hs(h);
    for (int i = 0; i < h; ++i) {
        long long here=0;
        for (int j = 0; j < w; ++j) {
            hs[i] += scanner.read_int();
        }
        sum+=hs[i];
    }
    string ans;
    char num[13];
    unsigned int idx=0;
    for(int i=0;i<h;i++){
        unsigned res=hs[i]+sum;
        int now=0;
        if(res==0){
            ans+='0';
            ans+='\n';
        }
        else{
            while(res){
                num[now]=(char)'0'+res%10;
                now++;
                res/=10;
            }
            while(now){
                now--;
                ans+=num[now];
            }
            ans+='\n';
        }
        
    }
    cout << ans;
}
0