EOJ----F. 蚂蚁

F. 蚂蚁

Time limit per test: 0.5 seconds

Time limit all tests: 5.0 seconds

Memory limit: 256 megabytes

Accept / Submit: 23 / 64

水平线上有 N 只蚂蚁,每只蚂蚁的位置及大小均不同。他们沿着 X 轴爬行,有的向左,有的向右,爬行的速度是一样的,两只蚂蚁相遇大一点的会吃掉小的。

现在从左到右给出每只蚂蚁的大小和爬行的方向( 0 表示向左, 1 表示向右)。问足够长的时间之后,能剩下多少只蚂蚁?

Input

第 1 行:一个整数 N ,表示蚂蚁的数量 (1N105)

第 2 到  N+1 行:每行两个数 Ai,Bi (1Ai109Bi{0,1}) ,中间用空格分隔,分别表示蚂蚁的大小及爬
行的方向, Bi=0 表示向左, Bi=1 表示向右。

对于 3/8 的数据,存在 x 满足:所有坐标比 x 小的蚂蚁向左爬、坐标比 x 大的蚂蚁向右爬;或者所有坐标比 x 小的蚂蚁向右爬、坐标比 x 大的蚂蚁向左爬。

Output

输出最终剩下的蚂蚁的数量。

Examples

Input
5
4 0
3 1
2 0
1 0
5 0
Output
2

错误代码:

//#include<iostream>
//#include<cstdio>
//#include<algorithm>
//#include<cstring>
//#include<string>
//using namespace std;
//struct A
//{
//    int a,b;
//} f[100001];
//int main()
//{
//    int n,ans;
//    scanf("%d",&n);
//    ans=0;
//    for(int i=0; i<n; i++)
//        scanf("%d %d",&f[i].a,&f[i].b);
//    for(int i=0; i<n-1; i++)
//    {
//        if(f[i].b==1&&f[i+1].b==0)
//        {
//            if(f[i].a<=f[i+1].a)
//            {
//                if(f[i].a<f[i+1].a)
//                {
//                    ans++;
//                    //i++;
//                }
//                else
//                    f[i+1]=f[i];
//            }
//            else
//            {
//                ans++;
//                f[i+1]=f[i];
//            }
//        }
//    }
//    printf("%d\n",n-ans);
//    return 0;
//}


AC的:
思路:用栈来模拟即可

#include <iostream>
#include <stack>
#define N 100005
using namespace std;
int main()
{
    stack<int>s;
    int n,a,b,m;
    scanf("%d",&n);
    m=n;
    while(n--)
    {
        scanf("%d %d",&a,&b);
        if(b==1)
            s.push(a);
        if(b==0)
        {
            while(!s.empty())
            {
                if(a>s.top())
                {
                    s.pop();
                    m--;
                }
                else
                {
                    m--;
                    break;
                }
            }
        }
    }
    printf("%d\n",m);
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值