【競プロ精進ログ】ABS編<6>

zuka

APG4bを終えたので次はABSです。

本記事は,管理人の競技プロ精進日記としてログを取ったものです。モチベーションを爆上げするために,積極的にアウトプットしていく作戦です。これから競技プログラミングを始めようと考えている人や,なんとなく敷居が高いと感じている人の参考になれば嬉しく思います。その他の記事は以下をご覧ください。

目次

本記事の概要

Atcoderが公表しているc++の入門記事の内容を1からさらっていくものです。今回はABC083B Some Sumsです。

実装

#include <bits/stdc++.h>
#define _GLIBCXX_DEBUG
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
using namespace std;

int main() {
  int N, A, B = 0;
  int ans = 0;
  int cnt = 0;
  cin >> N >> A >> B;
  rep(i, N){
    cnt = i+1;
    int wa = 0;
    // ここがキモ。10で割ったあまりを見ていくことで10進数の各桁の数字を抽出する。
    rep(j, 5){
      wa += (cnt%10);
      cnt /= 10;
    }
    if (A <= wa && wa <= B) ans+=i+1;
  }
  cout << ans << endl;
}

ポイント

今回おさえるべき内容

 10進数の各位の数を調べる方法を確認する

10進法の各位の和は,10で割ったあまりを見ていくことで抽出することができます。stringで受け取って1文字ずつintに変換しようとするとハマります。forループの回数が5であるのは,Nが大きくても10^4であることがわかっているからです。最大で5ケタ目まで調べればOKですよね。

よかったらシェアしてね!

コメント

コメントする

目次
閉じる