けんちょんの競プロ精進記録

競プロの精進記録や小ネタを書いていきます

AtCoder ABC 319 B - Measure (灰色, 200 点)

問題文で書かれた通りに実装するだけなのだが、問題文の内容を理解するのが大変で、戸惑った人も多いかもしれない。

問題概要

正の整数  N が与えられるので、次のようにして定まる  N+1 文字の文字列  S を出力せよ。

  •  i = 0, 1, \dots, N に対して、1 以上 9 以下の  N の約数  j であって、 i N/j の倍数であるものが存在するとき、そのような最小の  j に対応する数字を  S_{i} とする
  • そのような  j が存在しないときは、 S_{i} = '-' とする

コード

本当に言われた通りにやるだけ。各  i = 0, 1, \dots, N に対して、 j = 1, 2, \dots, 9 が条件を満たすかどうかを順に確かめていけばよい。

#include <bits/stdc++.h>
using namespace std;

int main() {
    int N;
    cin >> N;
    
    for (int i = 0; i <= N; ++i) {
        int res = -1;  // 条件を満たす初めての j を取得する
        for (int j = 1; j <= 9; ++j) {
            if (N % j == 0 && i % (N / j) == 0) {
                res = j;
                break;
            }
        }
        if (res == -1) cout << "-";
        else cout << res;
    }
    cout << endl;
}