A、The Doors
思路:红色为本题的解题要点,也就是Mr.Block从左往右依次打开每一个门,当第一次能打开左边出口或者右边出口的最后一个门所在的打开位置index就是要找的最小下标k。注意:题目已经保证了左右出口至少各有一个门,也就是说k一定是给定01序列中最后一个元素(与其右边相邻元素值不同)所在的下标(不超过n-1),于是倒叙遍历简单判断一下即可。
AC代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <cstdlib> 4 #include <cmath> 5 #include <iostream> 6 #include <algorithm> 7 #include <iomanip> 8 #include <complex> 9 #include <string> 10 #include <vector> 11 #include <set> 12 #include <map> 13 #include <list> 14 #include <deque> 15 #include <queue> 16 #include <stack> 17 #include <bitset> 18 using namespace std; 19 typedef long long LL; 20 typedef unsigned long long ULL; 21 const int dir[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; // 上右下左 22 const int mx[8] = {-1, -2, -2, -1, 1, 2, 2, 1}; // 马可走的八个方向 23 const int my[8] = {-2, -1, 1, 2, 2, 1, -1, -2}; 24 const double eps = 1e-6; 25 const double PI = acos(-1.0); 26 const int maxn = 2e5+5; 27 const int inf = 0x3f3f3f3f; 28 29 int n, a[maxn]; 30 31 int main() { 32 while(cin >> n) { 33 for(int i = 0; i < n; ++i) cin >> a[i]; 34 for(int i = n - 2; ~i; --i) 35 if(a[i] ^ a[i + 1]) {cout << i + 1 << endl; break;} 36 } 37 return 0; 38 }