P5250 【深基17.例5】木材仓库
查看原帖
P5250 【深基17.例5】木材仓库
1010172
solo1楼主2023/8/22 16:44

大神们为什么答案错误啊?

//P5250 【深基17.例5】木材仓库 集合
#include<iostream>
#include<set>  //集合的头文件
#include<cmath>
#include<vector>
using namespace std;

int main()
{
	long long op, a, b, n, inf = 9999999999, min;
	set <int> s;   //创建集合
	vector <int> v;
	
	cin >> n;
	for(int i = 1; i <= n; i++)
	{
	cin >> op;
	switch(op)
	{
		case 1:   //1 是进货
			cin >> a;
			if(s.find(a) == s.end())   //集合查找返回的是指针,而且是从头到尾开始查找的
			//这里if语句的意思是集合中没有a这个元素
				s.insert(a);   //在集合中插入元素
			else
				cout << "Already Exist" << endl;
			break;		
		case 2:  //2 是出货
			cin >> b;
			if(s.size() == 0)   //集合为空
				//cout << "Empty" << endl;  这样会先输出Empty 所以屏蔽了放在下边
				break;
			else if(s.find(b) != s.end())	//表示集合中含有b这个元素
			{
				v.push_back(b);
				s.erase(b);   //删除
			}	
			else
			{
				for(auto p = s.begin(); p != s.end(); p++)
				{
					if(abs(*p - b < inf))
					{
						inf = *p - b;
						min = *p;
					}
				}
				v.push_back(min);
				s.erase(min);   //出库了,应在集合中进行删除
				inf = 9999999999;
			}
			break;					
	}
    }
    for(auto p = v.begin(); p != v.end(); p++)
    	cout << *p << endl;
    if(s.size() == 0)  //集合为空
		cout << "Empty" << endl; 	
    system("pause");
    return 0;
}
2023/8/22 16:44
加载中...