これのやつです。
問題
解答コード
process.stdin.resume();
process.stdin.setEncoding('utf8');
// 自分の得意な言語で
// Let's チャレンジ!!
var lines = [];
var reader = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
reader.on('line', (line) => {
lines.push(line);
});
reader.on('close', () => {
const [n, m] = lines[0].split(' ').map(item => Number(item));
const set = n * 2;
let front = 1;
let back;
let i = 0;
while(front <= m){
if(front % set === 1){
i++;
back = i * set;
}else{
back--;
}
front++;
}
console.log(back);
});
解説
問題見た時 N(1) で求められそうだな、と思いました。ただ、計算式を作るより、そのまま処理を書いてしまった方が自分の数学知識的に早そうだし、間違った時にデバッグしやすそうだなと思い、そのまんま処理を書きました。
単純に以下の順で数えてます。
<入力例3>
3 8
の場合
front...1 back ...6
front...2 back ...5
front...3 back ...4
front...4 back ...3
front...5 back ...2
front...6 back ...1
front...7 back ...12
front...8 back ...11
感想
Bランクは問題の内容さえ理解していれば、そのまま解けば大丈夫そうな印象でした。
ただ、実際のレベルアップの試験の方が難しいので実際はわかりません。
(自分はBランクで、Aランクアップへの挑戦に何度か負けています)
あまり解説していませんが、読んでいただきありがとうございます。