站外题求助
查看原帖
站外题求助
822299
targancommander楼主2022/10/8 20:48

题目描述

小可家里有一个木材仓库,仓库里面存储着不同长度的木材(没有长度相同的两根木材)。放假的时候,小可会在仓库里面帮忙,有时候小可需要进木材,有时有需要卖出木材,你需要帮助小可维护这个木材仓库。

这一天小可需要进行n次操作:

1 x,表示小可在仓库中放入一根长度为x的木材。注意:如果仓库中已经有长度x的木材,需要输出”Already Exist”。

2 x,表示小可要在仓库里面取出长度为x的木材。注意:如果此时仓库里面没有长度恰好为x的木材,那就需要取出仓库中和x长度最接近的木材,如果有多根木材符合上述要求,取出最短的一根,输出取出木材的长度;如果此时仓库是空的,则输出”Empty”。

输入

第一行输入一个n,表示接下来会有n次操作。(n≤100000)

接下来n行,每行两个数字,1 x表示放入长度为x的木材,2 x表示取出长度为x的木材。具体操作按照题目的注意实现来操作。(x109(x≤10^ 9

输出

按照不同操作,输出不同结果,不同操作的结果以换行间隔

样例输入

4
1 4
2 7
1 2
2 2

样例输出

4
2

我的代码:

#include<bits/stdc++.h>
using namespace std;
int n,x,z,p,i,minn;
vector<int> v;
int main(){
	cin>>n;
	while(n--){
		cin>>z>>x;
		if(z==1)v.push_back(x);
		else{
			p=-1;
			for(i=0;i<v.size();i++){
				if(v[i]==p){
					p=i;
					break;
				}
			}if(p==-1){
				minn=INT_MAX;
				for(i=0;i<v.size();i++){
					if(abs(v[i]-x)<minn){
						minn=v[i]-x;
						p=i;
					}
				}cout<<v[p]<<endl;
				v.erase(v.begin()+p);
			}else{
				cout<<x<<endl;
				v.erase(v.begin()+p);
			}
		}
	}return 0;
}
2022/10/8 20:48
加载中...