51nod 1289 大鱼吃小鱼

来源:互联网 发布:如何在淘宝网上开网店 编辑:程序博客网 时间:2024/05/20 23:59

这道题确实非常有趣,一直在想着用什么数据结构实现这个算法。最后看了下别人的思路瞬间明白了,原来还能用栈实现。然后总结了一下,好像如果问题涉及到顺序优先的时候应该都可以考虑一下栈。(如计算算数式,就是用栈来实现运算的优先级)。这道题的主要思路是,如果遇到朝向右游的鱼就把它入栈,如果是遇到朝向左的鱼则将其大小与栈顶的鱼做比较,如果大于栈顶的鱼则栈顶的鱼出栈,鱼的总数减一直到栈顶的鱼大于向左的鱼或者空栈;如果小于则栈顶原封不动,鱼的条数减一。

#include<cstdio>#include<stack>using namespace std;const int maxn=1e5+5;int n,t,w,cnt;int main(){    while(scanf("%d",&n)!=EOF){        cnt=0;        stack<int> s;        for(int i=0;i<n;i++){            cnt++;            scanf("%d%d",&w,&t);            if(t==1)                s.push(w);            if(t==0){                while(!s.empty()){                    if(s.top()>w){                        cnt--;                        break;                    }                    if(s.top()<w){                        cnt--;                        s.pop();                    }                }            }        }        printf("%d\n",cnt);    }    return 0;}


原创粉丝点击