1289 大鱼吃小鱼(51nod)解题报告

有N条鱼每条鱼的位置及大小均不同,他们沿着X轴游动,有的向左,有的向右。游动的速度是一样的,两条鱼相遇大鱼会吃掉小鱼。从左到右给出每条鱼的大小和游动的方向(0表示向左,1表示向右)。问足够长的时间之后,能剩下多少条鱼?

Input

第1行:1个数N,表示鱼的数量(1 <= N <= 100000)。
第2 - N + 1行:每行两个数A[i], B[i],中间用空格分隔,分别表示鱼的大小及游动的方向(1 <= A[i] <= 10^9,B[i] = 0 或 1,0表示向左,1表示向右)。

Output

输出1个数,表示最终剩下的鱼的数量。

Input示例

5
4 0
3 1
2 0
1 0
5 0

Output示例

2

这个简单模拟题 写得有点久啊,太蒻了

/*
1289

*/
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define ll long long
const int N=1e5+10;
double len[N];
int vis[N];
double edg[N];
int main()
{
    int n;
    scanf("%d",&n);
    memset(edg,0,sizeof(edg));//里面存的是鱼的长度
    for(int i=0;i0&&vis[i]==0) //所有的吃与被吃的操作都在这里面
        {
            /*
            if(len[i]>edg[id]) //右吃左 haiyaojixu
            {
                ans++;
                edg[id]=len[i];
            }
            */
            //下面只是对edg里的鱼,和len[i]的的操作,且edg放的都是向右的鱼
            //情况1 往左的鱼一进来就被吃 --下面的if语句
            //2 往左的鱼没有把向右的鱼全吃掉--执行while后,edg[id]所代表的鱼就是吃掉len[i]的鱼,但while中没有计算len[i],
                //  故在if中将ans++;
            //3 往左的鱼所有的向右的鱼吃掉-- 执行while后,id=0,不会执行if(len[i]edg[id]&&id>0)
            {
                edg[id]=0;
                ans++;
                id--;
            }
            if(len[i]

 

你可能感兴趣的:(51nod---解题报告)