首页 > 其他分享 >P5250 【深基17.例5】木材仓库

P5250 【深基17.例5】木材仓库

时间:2024-08-26 21:48:30浏览次数:10  
标签:输出 17 仓库 木材 深基 Length P5250 长度 op

【深基17.例5】木材仓库

题目描述

博艾市有一个木材仓库,里面可以存储各种长度的木材,但是保证没有两个木材的长度是相同的。作为仓库负责人,你有时候会进货,有时候会出货,因此需要维护这个库存。有不超过 100000 条的操作:

  • 进货,格式1 Length:在仓库中放入一根长度为 Length(不超过 $10^9$) 的木材。如果已经有相同长度的木材那么输出Already Exist
  • 出货,格式2 Length:从仓库中取出长度为 Length 的木材。如果没有刚好长度的木材,取出仓库中存在的和要求长度最接近的木材。如果有多根木材符合要求,取出比较短的一根。输出取出的木材长度。如果仓库是空的,输出Empty

输入格式

输出格式

样例 #1

样例输入 #1

7
1 1
1 5
1 3
2 3
2 3
2 3
2 3

样例输出 #1

3
1
5
Empty

算法1

(Set)

看完题目就想到了set

没想到的地方:

出货时,如何找更优解

主要思路

1.set有去重,排序的功能

2.进货时,set集合中是否已经存在该长度的木头,如果有则输出Already Exist,如果没有则插入该长度

if(op == 1){
    if(s.count(x))   //可以利用count(x),来查找存在情况
    cout << "Already Exist" <<endl;
    else s.insert(x);
}

3.出货时,首先判断集合是否为空,如果不空那么通过s.lower_bound(x) ,来查找第一个大于等于x的值,注意返回值为迭代器

分两种情况:
(1)存在长度为x的木头时,直接输出

(2)不存在长度为x的木头

	if(s.empty()) cout << "Empty" << endl;
			else{
				iter l,r;
				r = s.lower_bound(x);  //返回第一个大于等于x的数的位置
				l = r;
				if(r!=s.begin()) l--;   //集合中存在一个元素以上的时候 
			    if(r!=s.begin() && abs(*l - x) <= abs(*r -x)) r--; 
				cout <<  *r << endl;
				s.erase(*r); 
			}  

C++ 代码

#include <bits/stdc++.h>
using namespace std;

typedef set<int>::iterator iter;

int n;
set<int>s;

int main(){
	cin >> n;
	while(n--){
		int op,x;
		cin >> op >> x;
		
		//插入操作 
		if(op == 1) {
		   if(s.count(x)) cout << "Already Exist" << endl;
		   else s.insert(x);
		}
		else{
			if(s.empty()) cout << "Empty" << endl;
			else{
				iter l,r;
				r = s.lower_bound(x);  //返回第一个大于等于x的数的位置
				l = r;
				if(r!=s.begin()) l--;   //集合中存在一个元素以上的时候 
			    if(r!=s.begin() && abs(*l - x) <= abs(*r -x)) r--; 
				cout <<  *r << endl;
				s.erase(*r); 
			} 
		}
	}
	return 0;
}


标签:输出,17,仓库,木材,深基,Length,P5250,长度,op
From: https://www.cnblogs.com/ltphy-/p/18381652

相关文章

  • springboot快递物流管理系统-计算机毕业设计源码85178
    目 录摘要1绪论1.1选题背景与意义1.2国内外研究现状1.3论文结构与章节安排2 快递物流管理系统分析2.1可行性分析2.1.1技术可行性分析2.1.2 经济可行性分析2.1.3操作可行性分析2.2系统流程分析2.2.1数据增加流程2.2.2数据修改流程2.2.3......
  • 【日记】这个月花了好多钱(1317 字)
    正文这几天都好热。热到人不想动,只想睡觉。今天写文章发现自己有个很显著的特点,就是在有个框架之后,具体细节完全没有预设。我只能像马尔可夫链一样,形成一个比较窄的窗口,接着这个窗口里的情节往下写,否则我就会宕机,写不出来。整个故事情节看起来也就比较散。马尔可夫链拯......
  • 题解:AT_joisc2017_f 鉄道旅行 (Railway Trip)
    题意鉄道旅行(RailwayTrip)分析非常神仙的倍增做法。我们设\(l_{i,j}\)表示从\(i\)点出发,停靠\(2^j\)站后能抵达的最左位置。同理设\(r_{i,j}\)表示从\(i\)点出发,停靠\(2^j\)站后能抵达的最右位置。考虑如何更新这两个状态。因为可以走回头路,所以简单的\(l......
  • 题解:P5217 贫穷
    题意维护一个字符串,支持以下操作:\(\texttt{Ixc}\),在第\(x\)个字母后面插入一个\(c\)。\(\texttt{Dx}\),删除第\(x\)个字母。\(\texttt{Rxy}\),反转当前文本中的区间\([x,y]\)。\(\texttt{Px}\),输出初始文本中第\(x\)个字母在当前文本中的位置。特别地,若不存在,......
  • 题解:P5680 [GZOI2017] 共享单车
    题目分析出题人是擅长隐藏题意的建树首先给你一张无向图,然后指定一个根节点\(k\),从根节点开始沿最短路到每一个节点。如果到某个节点有多条最短路径,选择上一个节点编号最短的。考虑记录前驱的Dijkstra。namespaceDJ{intdis[maxn],pre[maxn],val[maxn],vis[maxn]......
  • UE5学习笔记17-让人物的视线和鼠标移动时的方向一致,并且不让人物模型旋转,只改变视线方
    一、创建标准动画帧    1.我想让人物在装备武器后根据鼠标的移动方向改变人物的视线方向,并且人物模型不会改变朝向    2.我的动画中存在一个四个方向瞄准的动画,将左下,坐上,左转,右上,右下,右转,中上,中下,中,的动画的某一帧保留,具体流程如下(记得复制一份动画资源,可......
  • 【数据结构-前缀异或和】力扣1177. 构建回文串检测
    给你一个字符串s,请你对s的子串进行检测。每次检测,待检子串都可以表示为queries[i]=[left,right,k]。我们可以重新排列子串s[left],…,s[right],并从中选择最多k项替换成任何小写英文字母。如果在上述检测过程中,子串可以变成回文形式的字符串,那么检测结果为......
  • [COCI2017-2018#5] Planinarenje
    这道题目是二分图博弈的板子介绍一下二分图博弈:设两部的节点分别为\(x_1,x_2,...,x_n\)和\(y_1,y_2,...,y_m\),先手选择了\(x_i\)这个节点,则先手必胜当且仅当\(x_i\)是最大匹配的必须点(也就是说少了\(x_i\)的话最大匹配数会减少)证明:任选一个最大匹配,则\(x_i\)为匹配点,先手的策......
  • 17-神经网络-延迟初始化
    使用torch.nn.LazyLinear(output)实现延迟初始化importtorchimporttorch.nnasnnclassMyModel(nn.Module):def__init__(self):super(MyModel,self).__init__()self.fc1=nn.LazyLinear(128)#输入维度设置为None,表示延迟初始化self......
  • rocketmq 是参考了 kafka架构, 为什么rocketmq吞吐量是10万/秒, kafka吞吐量是17万/秒
    我们都知道,为了防止消息在服务器丢失,一般都是进行持久化(保存在磁盘),在发送消失时那就涉及到从磁盘拷贝到内核空间,从内核空间到用户态,再从用户态到socket缓存区,从socket缓存区到网卡四次拷贝。kafka使用的是零拷贝-sendfile,把内核态数据发送到网卡,减少两次拷......