51Nod-1289-大鱼吃小鱼
2016-05-16 20:27
281 查看
有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
栈……
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
栈……
#include <stdio.h> int main(int argc, const char * argv[]) { int N; int A[100001], B[100001]; int C[100001]; scanf("%d", &N); for (int i = 0; i < N; i++) { scanf("%d %d", A + i, B + i); } int m = N; int top = -1; for (int i = 0; i < N; i++) { if (B[i] == 1) { C[++top] = A[i]; } else { while (top != -1) { m--; if (C[top] < A[i]) { top--; } else { break; } } } } printf("%d\n", m); return 0; }
相关文章推荐
- 我的Android进阶之旅------>RxJava学习资料汇总
- Windows编程中的子窗口控件设计
- poj3070Fibonacci 矩阵快速幂
- 继承
- AndroidManifest.xml配置文件详解
- Boost.Smart_ptr/enable_share_from_this笔记
- Android小知识点速记
- Android开发指南——Service
- 数组——sort colors
- vs2015 vassistX 每次重启之后都要重新破解的解决办法
- Andriod开发技巧——Fragment的懒加载
- HDU2521 反素数
- centos6.6搭建LNMP(Php5.6.2+Mysql5.6.21+Nginx1.6.2)
- Retrofit分析-漂亮的解耦套路
- 零碎知识点
- 279. Perfect Squares
- 算法课实验
- android学习之路---java部分 I/O流
- Android基础——广播接收者BroadcastReceiver
- 【Java】多线程实现方式