1289 大鱼吃小鱼

  1. 1 秒
  2. 131,072 KB
  3. 5 分
  4. 1 级题

有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<set>
#include<map>
#include<list>
#include<queue>
#include<stack>
#include<math.h>
#include<vector>
#include<bitset>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<algorithm>
#define eps (1e-8)
#define MAX 0x3f3f3f3f
#define u_max 1844674407370955161
#define l_max 9223372036854775807
#define i_max 2147483647
#define re register
#define pushup() tree[rt]=tree[rt<<1]+tree[rt<<1|1]
#define nth(k,n) nth_element(a,a+k,a+n);  // 将 第K大的放在k位
#define ko() for(int i=2;i<=n;i++) s=(s+k)%i // 约瑟夫
using namespace std;inline int read(){char c = getchar(); int x = 0, f = 1;while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}while(c >= '0' & c <= '9') x = x * 10 + c - '0', c = getchar();return x * f;
}typedef long long ll;
const double pi = atan(1.)*4.;
const int M=1e3+5;
const int N=1e6+5;
stack<int>ss;
int main(){int n,a,b;scanf("%d",&n);int ans=n;for(int i=0;i<n;i++){scanf("%d %d",&a,&b);if(b==1)ss.push(a);else {while(!ss.empty()){int g=ss.top();if(g<a){ans--;ss.pop();}else{ans--;break;}}}}printf("%d\n",ans);return 0;
}

(模拟 - 栈应用)1289 大鱼吃小鱼相关推荐

  1. 51nod - 1289 大鱼吃小鱼(栈)

    思路: 向左走的可能会被向右走的吃,向右走的可能被向左的吃. 栈中存向右的小鱼. 如果当前鱼向左,则依次与栈顶鱼比较大小,如果能吃光则能存活:如果当前鱼向右,则加入栈. 最后栈中鱼的数量加上向左走存活 ...

  2. 51nod -1289 . 大鱼吃小鱼(思维)

    1289 . 大鱼吃小鱼 题目来源: Codility 基准时间限制:1 秒 空间限制:65536 KB 分值: 5 有N条鱼每条鱼的位置及大小均不同,他们沿着X轴游动,有的向左,有的向右.游动的速度 ...

  3. 六、使用数组模拟栈的思路及代码实现

    使用数组模拟栈的实现过程 1.栈的介绍 (1) 栈的英文为(stack) (2) 栈是一个先入后出(FILO-First In Last Out)的有序列表. (3) 栈(stack)是限制线性表中元 ...

  4. 第一回写的用arraylist模拟栈操作

    package hashMap; import java.util.ArrayList; import d.Student; /*** 用ArrayList模拟栈操作* @author zhujiab ...

  5. 032_使用ArrayDeque模拟栈结构

    import java.util.ArrayDeque; import java.util.Iterator;/*** 使用ArrayDeque模拟栈结构*/ public class DequeSt ...

  6. 数组模拟栈和队列板子

    使用数组模拟数据结构栈和队列 栈:后进先出 对于栈:我们使用tt表示栈顶的下标,如果tt==0表示栈空 队列:先进先出 对于队列,我们使用hh表示队首,tt表示队尾,tt初始化为-1,判断队列是否为空 ...

  7. Leetcode402 remove-k-digits贪心+vector模拟栈的思想

    题目 给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小. 注意: num 的长度小于 10002 且 ≥ k. num 不会包含任何前导零. 示例 1 : 输入: ...

  8. CCF-CSP 201903-2 二十四点 Python语言 模拟栈实现

    项目场景: 二十四点问题本质是处理表达式,一提到处理表达式第一反应大概就是使用栈来处理,虽然网上大部分使用python语言处理二十四点问题都是利用强大的eval()函数,但我仍然想要使用python的 ...

  9. LinkedList 模拟栈和队列

    LinkedList 比ArrayList 提供了更多的方法,其中有两个方法可以实现栈和队列的操作. removeFirst() 移除并返回此列表中的第一个元素. removeLast() 移除并返回 ...

最新文章

  1. BERT的通俗理解 预训练模型 微调
  2. Gzip 服务端压缩数据
  3. MySQL下优化SQL的一般步骤
  4. 9.0 C++远征:对象成员
  5. (转) Java线程同步阻塞, sleep(), suspend(), resume(), yield(), wait(), notify()
  6. 探索 YOLO v3 实现细节 - 第6篇 预测 (完结)
  7. ZOJ4100 浙江省赛16th Problem A
  8. 贷款审批到底会考核哪些内容?
  9. Linux Apache服务详解——用户个人主页实战
  10. Linux音频驱动-ALSA概述
  11. ps 显示当前进程的状态
  12. html滑动验证图片,js插件实现图片滑动验证码
  13. 嵌入式应用软件开发的步骤流程
  14. mingw32 编译 fastdb
  15. 怎么用c语言解三元二次方程组,三元二次方程组解法
  16. 路由器桥接LAN接LAN口(改DHCP以及详细避坑教程)
  17. 【Python】P2440 木材加工
  18. python爬虫和java爬虫哪个好_应用数据下载
  19. 几行代码教你爬取LOL皮肤图片
  20. 网络转型中的设备硬件形态选择初探

热门文章

  1. linux 运行php项目,如何在linux部署php项目
  2. 世界币来了, World App 的 Worldcoin探讨,它和chatgpt有什么关系呢?
  3. 数学真题2004-2007
  4. 马哈鱼分析数据库中metadata的血缘关系
  5. C# 从 short 转 byte 方法
  6. 程序员的凄凉及与其自身的关系
  7. linux环境下DOL的配置
  8. 多元线性回归—自相关
  9. 系统验证服务器+ios,iOS iap receipt 服务器校验
  10. 【Python神奇操作】python实现驾考自动答题,直接收获满分答卷~