题解 P5250 【【深基17.例5】木材仓库】
又是储存数据的题目,我们来用
先要判断长度是否有重复,若无重复,再存入数据。
if(x == 1)
{
bool ok = 0;
for(int i = 0;i < s.size();i++)
{
if(s[i] == y)//重复情况
{
cout<<"Already Exist"<<endl;
ok = 1;
break;
}
}
if(!ok) s.push_back(y);//没有重复,就存入该长度
}
首先判断库中有无木材,若有,我们需要取一个最优的答案,满足最接近
循环库中的所有木材,不停地找出与
if(s.size() == 0) cout<<"Empty"<<endl;//没有库存
else
{
int w = 0x7f7f7f7f,num,t;
for(int i = 0;i < s.size();i++)
{
if(abs(y - s[i]) < w) w = abs(y - s[i]),num = s[i],t = i;//最接近的答案
if(abs(y - s[i]) == w && s[i] < num) num = s[i],t = i;//较短的木材
}
s.erase(s.begin() + t);//取出最优解的木材
cout<<num<<endl;
}
完整代码如下:
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
vector <int> s;//vector来储存
int main()
{
int n;
cin>>n;
while(n--)
{
int x,y;
cin>>x>>y;
if(x == 1)
{
bool ok = 0;
for(int i = 0;i < s.size();i++)
{
if(s[i] == y)//重复情况
{
cout<<"Already Exist"<<endl;
ok = 1;
break;
}
}
if(!ok) s.push_back(y);//没有重复,就存入该长度
}
else
{
if(s.size() == 0) cout<<"Empty"<<endl;//没有库存
else
{
int w = 0x7f7f7f7f,num,t;
for(int i = 0;i < s.size();i++)
{
if(abs(y - s[i]) < w) w = abs(y - s[i]),num = s[i],t = i;//最接近的答案
if(abs(y - s[i]) == w && s[i] < num) num = s[i],t = i;//较短的木材
}
s.erase(s.begin() + t);//取出最优解的木材
cout<<num<<endl;
}
}
}
return 0;
}