butch’s blog

メモ置き場。

【ABC】 164 D - Multiple of 2019 (C++)

「ABC 164 D - Multiple of 2019」をC++で実装しようとした。

butch416.hatenablog.com

数年ぶりにC++を触ることになる。
intの範囲とかをもう少し勉強する必要がある。

・参考ページ:

【C言語入門】整数(int、long int、short int)の使い方 | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト

「1000000007 で割ったあまり」の求め方を総特集! 〜 逆元から離散対数まで 〜 - Qiita

C++ の多倍長整数型・多倍長浮動小数点数型 : boost::multiprecision の競技プログラミングでの使い方メモ - Qiita

pythonでは特に気にしていなかった。 pythonの中身はどうなってんだ。

#include <iostream>
#include <vector>
#include <string>
#include <stdio.h>

using namespace std;

int main(){
    string S;
    cin >> S;
    const unsigned long int N = S.size();
    unsigned long int value = 0;
    unsigned long int t = 1;
    const unsigned long int mod = 2019;
    vector<int> DP(mod, 0);
    DP[0] = 1;
    for(int i=N-1; i>-1 ;i--){
        value += (int(S[i]) - int('0')) * t;
        //cout << int(S[i]) - int('0') << ' ' << value << ' ' << value % mod << ' ' << (int(S[i]) - int('0')) * t << ' ' << t  << endl;
        DP[value % mod] += 1;
        t *= 10;
    }
    int num = 0;
    for (int i=0; i<mod; i++){
        num += DP[i] * (DP[i] - 1)/2;
    }
    cout << num << endl;
return 0;
}