标签:大小 out i++ ref black 方向 思路 namespace ext
第1行:1个数N,表示鱼的数量(1 <= N <= 100000)。 第2 - N + 1行:每行两个数A[i], B[i],中间用空格分隔,分别表示鱼的大小及游动的方向(1 <= A[i] <= 10^9,B[i] = 0 或 1,0表示向左,1表示向右)。
输出1个数,表示最终剩下的鱼的数量。
5 4 0 3 1 2 0 1 0 5 0
2
思路:这个题思路还是比较活的,我在想之所以放在一级算法是不是因为这个题暴力也能解。
这个题我是这样想的,往右走的鱼就把它压入栈中,知道碰见往左走的鱼,然后与栈中的鱼比较,知道碰见比往左走的鱼大的或者全部比较完,栈为空则那支左走鱼还活着,记录往左走还活下来的鱼的数量;
全部数据进行完之后,栈中的鱼也都是活下来的鱼。最后相加输出。运用STL中的stack就很好写了
#include<cstdio> #include<stack> #include<iostream> #include<functional> #include<algorithm> using namespace std; int main() { int n; cin >> n; int sum = 0; stack<int>sta; for (int i = 0; i < n; i++){ int size, move; cin >> size >> move; if (move==0){ while (!sta.empty()){ if (sta.top() >= size) break; sta.pop(); } if (sta.empty()){ sum++; continue; } } else sta.push(size); } sum += sta.size(); cout << sum << endl; return 0; }
标签:大小 out i++ ref black 方向 思路 namespace ext
原文地址:https://www.cnblogs.com/zengguoqiang/p/9147661.html