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

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

AtCoder ABC 308 A - New Scheme (灰色, 100 点)

「単調増加かどうか判定」は典型。そのような処理の実装に慣れよう!

問題概要

長さ  8 の数列  S_{1}, S_{2}, \dots, S_{8} が与えられる。この数列が以下の条件を全て満たすかどうかを判定せよ。

  • 広義単調増加である
  • すべて 100 以上 675 以下である
  • すべて 25 の倍数である

解法

この手の「全て満たすかどうかを判定せよ」という問題では、判定する関数を用意すると実装しやすい。

関数の中で if (条件を満たさない) return false; という形の文を連ねていけばよい。

コード

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

bool judge(vector<int> S) {
    // 単調増加でなかったら false
    for (int i = 0; i+1 < S.size(); ++i) {
        if (S[i] > S[i+1]) return false;
    }
    
    // 100 以上 675 以下でないものはダメだし、25 の倍数でないものもダメ
    for (auto a : S) {
        if (a < 100 || a > 675) return false;
        if (a % 25 != 0) return false;
    }
    
    // すべてクリアしたら true
    return true;
}

int main() {
    vector<int> S(8);
    for (int i = 0; i < 8; ++i) cin >> S[i];
    
    if (judge(S)) cout << "Yes" << endl;
    else cout << "No" << endl;
}