プログラミングレベル (paizaランク C 相当)
JavaScriptで解いてみました。
解答例
問題は好きな順序で解くことができるので、考えやすいように、aを難易度が小さい順にソートしておきます。
あとは、問題文に従って、aの難易度が小さい順に、以下の条件を満たすか調べていきます。
難易度 a_i の問題を解くには「プログラミングレベル」が a_i 以上である必要
難易度 a_i の問題を解くと「プログラミングレベル」が a_i + 1 になる
変数flagを使って判定をします。
途中で解けなかったらfalse→No、全部解けたらtrue→Yesを出力します。
JavaScript
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
//問題の個数 n
const [n, q] = lines[0].split(" ").map(Number);
//問題の難易度 a
const a = lines[1].split(" ").map(Number);
//問題は好きな順序で解くことができるので、考えやすいようにaを昇順にソート
const aSorted = a.sort((a, b) => a - b);
//aを難易度が小さい順に調べる
let kyoko = 1;//京子ちゃんのプログラミングレベル
let flag = true;//全ての問題が解けるか
for (let i = 0; i < n; i++) {
//難易度 a_i の問題を解くには「プログラミングレベル」が a_i 以上である必要
if (kyoko >= a[i]) {
//難易度 a_i の問題を解くと「プログラミングレベル」が a_i + 1 になる
kyoko = a[i] + 1;
} else {
flag = false;//解けなかった
break;
}
}
console.log(flag ? "Yes" : "No");
解答例(C++の場合の模範解答参考)
問題aを考えやすいように昇順にソートする。
京子ちゃんの初期レベルは1なので、難易度1の問題がないと解けない。
解いたらレベルが1上がるので、次に解く問題は+1以下でないと解けない。
以上を全て満たせばYes!満たさなかったらNo。
C++はreturn
で処理を止められるが、JavaScriptはreturn
ではなく、try…catch
を使うとできる。しかし、少し煩雑になるので、flagでYesとNoの判定をした。
JavaScript
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
//問題の個数 n
const [n, q] = lines[0].split(" ").map(Number);
//問題の難易度 a
const a = lines[1].split(" ").map(Number);
//問題は好きな順序で解くことができるので、考えやすいように
//aを昇順にソート
const aSorted = a.sort((a, b) => a - b);
let flag = true;//京子ちゃんが問題を全部解けるか
//京子ちゃんの初期レベルが1なので、問題レベル1がないと解けない
if (a[0] !== 1) {
flag = false;
} else {
//aを難易度が小さい順に調べる
for (let i = 0; i < n - 1; i++) {
//次に解く問題の難易度は同じか+1でないと解けない
if (!(a[i + 1] <= a[i] + 1)) {
flag = false;
}
}
}
console.log(flag ? "Yes" : "No");