最近事情比较多,做的题目都没时间写题解,会抽空都把题解补了。
洛谷 CF46B T-shirts from Sponsor
这道题我的思路是,先把尺码转为数字代表,然后每次从i=0到5的移动量先判断大i码是否有存量再判断小i码是否有存量,有就输出并减少库存跳出for循环,这样子就达到了既选择最接近的尺寸又在大小都有时优先选择偏大尺码的要求。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int k,a[10];
string str;
map<int,string>c;
int ck(string str)//将尺码转为数字
{
if(str=="S")return 0;
if(str=="M")return 1;
if(str=="L")return 2;
if(str=="XL")return 3;
if(str=="XXL")return 4;
}
int main()
{
//便于输出
c[0]="S",c[1]="M",c[2]="L",c[3]="XL",c[4]="XXL";
cin>>a[0]>>a[1]>>a[2]>>a[3]>>a[4];
cin>>k;
while(k--)
{
cin>>str;
int o=ck(str);
//最多五次移动
for(int i=0; i<=5; i++)//第一轮i为0相当于判断当前码有无存货
{
//先判断大码有无
if(a[o+i])
{
cout<<c[o+i]<<endl;
a[o+i]--;
break;
}
if(a[o-i])
{
cout<<c[o-i]<<endl;
a[o-i]--;
break;
}
}
}
return 0;
}