大鱼吃小鱼(运用stack的模拟)

本文介绍了一种利用栈来解决特定鱼群游动问题的方法。该问题涉及到一定数量的鱼沿X轴方向游动,部分鱼向左,部分向右。当两条鱼相遇时,较大的鱼会吃掉较小的鱼。文章提供了一个算法实现方案,通过栈结构来高效地跟踪可能发生的碰撞,并计算最终剩余的鱼的数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

个人心得:这一题在暑假集训的周测里做到过,当时就死模拟,然后卡了很久很久才做对。现在发现运用stack其实非常方便,

将向左向右游动的鱼分开,则往后走只要往右移动的就放入stack,往左的时候就与stack进行对比,以后后面的鱼是与此时左边的鱼

是没有关系的,所以可以很好的解决,

有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
 1 #include<iostream>
 2 #include<cstring>
 3 #include<string>
 4 #include<cstdio>
 5 #include<vector>
 6 #include<cmath>
 7 #include<stack>
 8 #include<queue>
 9 #include<algorithm>
10 using namespace std;
11 #define in 1000000005
12 int  n;
13 int u[100005],v[100005];
14 int main()
15 {
16     cin>>n;
17     stack<int > pq;
18      for(int i=0;i<n;i++)
19          cin>>u[i]>>v[i];
20          int sum=n;
21      for(int i=0;i<n;i++)
22      {
23          if(v[i]==1)
24             pq.push(u[i]);
25          else
26             {
27                 if(pq.empty()) continue;
28                 int t=pq.top();
29                 if(t>u[i])
30                     sum--;
31                 else
32                 {
33                     while(t<u[i])
34                     {
35                         sum--;
36                         pq.pop();
37                         if(!pq.empty())
38                         t=pq.top();
39                         else
40                             break;
41 
42                     }
43                     if(pq.empty()) continue;
44                     else if(pq.top()>u[i]) sum--;
45 
46                 }
47             }
48      }
49      cout<<sum<<endl;
50     return 0;
51 }

 



转载于:https://www.cnblogs.com/blvt/p/7580756.html

资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值