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

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

AtCoder ABC 328 B - 11/11 (灰色, 200 点)

少し複雑めの全探索。

問題概要

1 年が  N ヶ月からなる暦がある。 1, 2, \dots, N 月はそれぞれ  D_{1}, D_{2}, \dots, D_{N} 日ある。

この暦において、ゾロ目に日付は何日あるかを答えよ。

制約

  •  1 \le N, D_{i} \le 100

考えたこと

 m = 1, 2, \dots, N について順に調べていけば良い。

  •  m 自体がゾロ目でないとダメ
  •  m がゾロ目なら、その数字を  v として、
    •  v \le D_{m} なら 1 加算
    •  11v \le D_{m} なら 1 加算

というようにする。

コード

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

int main() {
    int N;
    cin >> N;
    vector<int> D(N);
    for (int i = 0; i < N; ++i) cin >> D[i];
    
    int res = 0;
    for (int m = 1; m <= N; ++m) {
        // m 自体がゾロ目 (m = 1, 2, ..., 9, 11, 22, ..., 99)
        if (m <= 9 || m % 11 == 0) {
            int v = m % 10;
            
            // v 日と、vv 日が候補
            if (D[m-1] >= v) ++res;
            if (D[m-1] >= v * 11) ++res;
        }
    }
    cout << res << endl;
}