首页 > 其他 > 详细

51nod 1289 大鱼吃小鱼

时间:2019-05-16 22:10:32      阅读:138      评论:0      收藏:0      [点我收藏+]
有N条鱼每条鱼的位置及大小均不同,他们沿着X轴游动,有的向左,有的向右。游动的速度是一样的,两条鱼相遇大鱼会吃掉小鱼。从左到右给出每条鱼的大小和游动的方向(0表示向左,1表示向右)。问足够长的时间之后,能剩下多少条鱼?
 

输入

第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


用栈存向右的小鱼,每次遇到一只向左的小鱼,就把栈里能吃的鱼都吃了,如果栈变空,则此鱼存活,否则就是被栈里的大鱼吃了,最后栈里的都是存活的。
代码:
#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
typedef pair<int,int> pa;
int n,ans;
int a,b;
int s[100000],c;
int main() {
    scanf("%d",&n);
    for(int i = 0;i < n;i ++) {
        scanf("%d%d",&a,&b);
        if(b == 0) {
            while(c && s[c - 1] < a) c --;
            if(!c) ans ++;
        }
        else s[c ++] = a;
    }
    ans += c;
    printf("%d",ans);
}

 

51nod 1289 大鱼吃小鱼

原文:https://www.cnblogs.com/8023spz/p/10878276.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!