実戦では、変に難しく考えていて、2WAを出してしまいました。こどふぉのAは本当に苦手・・・。
問題
https://codeforces.com/contest/1293/problem/A
問題概要
あなたはn階建てビルのs階にいます。すべての階にレストランがありますが、そのうちk個が現在閉鎖中です。閉鎖していないレストランにたどり着くためには何階分上または下に移動する必要があるでしょうか。
解法
sから上下に一つずつ、閉鎖リストに入っていないかどうかをチェックすればいいです。
kの制約がゆるいため、Editorialはリストに入れて都度findすればいいよー、って言ってますが、setを使うほうがわかりやすいと思います。
#include <bits/stdc++.h> using namespace std; int main() { int t; cin >> t; while (t--) { int n, s, k; cin >> n >> s >> k; set<int> m; int a; for (int i = 0; i < k; i++) { cin >> a; m.emplace(a); } for (int i = 0; i < 1010; i++) { if (s - i >= 1) { if (m.count(s - i) == 0) { cout << i << endl; break; } } if (s + i <= n) { if (m.count(s + i) == 0) { cout << i << endl; break; } } } } }