最大イニング (paizaランク D 相当)
JavaScriptで解いてみました。
降板イニングをleave
とすると、初期値は1 ≦ i ≦ 9
以外なら任意なので0とします。完投の時はleave = 0
のまま、完投できなかったらleave
に降板イニングを記録することにします。
iイニングが終わった時点で、投げた球数がkを超えていたら、iイニングで降板します。降板イニングiをleave = i
で記録します。
iイニング終了時、球数がkちょうどだったときに考えることがあります。
ちょうどイニングの終了時に k 球に到達した場合は、もうそのイニングが終了してしまい、投手を交代することができないため、次のイニング開始時に降板します。(入力例 3 のケース)
すなわち、投げ終わったイニングをiとするとleave = i + 1
になります。
ただし、最終9イニングに球数がちょうどkに達したら、完投したことになり、leave = 0
のままです。
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin", "utf-8").trim();
const lines = input.split("\n");
const k = Number(lines[0]);//球数制限 k
let numBall = 0;//球数
let leave = 0;//降板イニング、初期値は0とする
for (let i = 1; i <= 9; i++) {
const m = Number(lines[i]);//i イニング目の球数を表す整数 m
numBall += m;
//イニングが終わったときの球数がk以上なら降板
if (numBall > k) {
leave = i;//降板イニング
break;//降板
//kちょうどのとき
//9イニングじゃなかったら次のイニングで降板、9イニングだったら完投
} else if (numBall === k && i !== 9) {
leave = i + 1;//次のイニングで降板
break;//降板
}
}
//完投できたか(leave初期値のままか)、できない場合は何イニングで降板か
console.log(leave === 0 ? "Yes" : leave);