公式

B - Locked Rooms 解説 by cn449


すべての \(i\) について \(L_i = 0\) であるとき

\(2\) 人の人はいずれも部屋 \(0, 1, \ldots, N\) に到達できます。したがって、この場合の答えは \(0\) となります。

\(L_i = 1\) なる \(i\) が存在するとき

\(L_i = 1\) を満たす最小の \(i\)\(X\)、最大の \(i\)\(Y\) とおきます。はじめに部屋 \(0\) にいる人は部屋 \(0, 1, \ldots, X - 1\) に、部屋 \(N\) にいる人は部屋 \(Y, Y + 1, \ldots, N\) に到達できます。したがって、\(2\) 人のいずれも到達できない部屋は部屋 \(X, X + 1, \ldots, Y - 1\)\(Y - X\) 個です。特に、\(X = Y\) のときは答えは \(0\) となります。

実装例

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

int main() {
	int n;
	cin >> n;
	vector<int> l(n);
	for (int i = 0; i < n; i++) cin >> l[i];
	int x = 0, y = 0;
	for (int i = 0; i < n; i++) {
		if (l[i] == 1) {
			x = i;
			break;
		}
	}
	for (int i = n - 1; i >= 0; i--) {
		if (l[i] == 1) {
			y = i;
			break;
		}
	}
	cout << y - x << '\n';
}

投稿日時:
最終更新: