CF46B T-shirts from Sponsor 题解
作者:互联网
Content
有一家服装店,有 \(\texttt{S}\) 码的衣服 \(n_S\) 件、\(\texttt{M}\) 码的衣服 \(n_M\) 件,\(\texttt{L}\) 码的衣服 \(n_L\) 件,\(\texttt{XL}\) 码的衣服 \(n_{XL}\) 件,\(\texttt{XXL}\) 码的衣服 \(n_{XXL}\) 件。
有 \(k\) 个人依次进来买衣服,每个人都有自己期望的尺码。如果服装店里面刚好有这个尺码的衣服,TA 就会拿上这件衣服离开,否则 TA 会选择尽可能接近自己的期望尺码的衣服(如果在这样的情况下有多种选择,则选择尺码较大的)。求这 \(k\) 个人最后各拿了什么尺码的衣服。
数据范围:\(1\leqslant n_S,n_M,n_L,n_{XL},n_{XXL}\leqslant 1000,1\leqslant k\leqslant n_S+n_M+n_L+n_{XL}+n_{XXL}\leqslant 1000\)。
Solution
这题目模拟就好,就是代码稍微长了一些。
我们先看是否有每个人的期望尺码的衣服,如果有那就直接选择,否则分别向大尺码和小尺码依次遍历,大尺码先遍历到就选择大尺码,小尺码先遍历到就选择小尺码。因为数据的特殊性,无需判断是否有足够的衣服。
Code
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
using namespace std;
int sze[7], k;
string str;
const string ans[6] = {"", "S", "M", "L", "XL", "XXL"};
int main() {
for(int i = 1; i <= 5; ++i) scanf("%d", &sze[i]);
scanf("%d", &k);
while(k--) {
cin >> str;
if(str == "S") {
if(sze[1]) {puts("S"); sze[1]--;}
else {
int cur = 1;
while(1) {
cur = min(5, cur + 1);
if(sze[cur]) {
cout << ans[cur] << endl;
sze[cur]--;
break;
}
}
}
} else if(str == "M") {
if(sze[2]) {puts("M"); sze[2]--;}
else {
int curl = 2, curr = 2;
while(1) {
curl = max(1, curl - 1), curr = min(5, curr + 1);
if(sze[curr]) {
cout << ans[curr] << endl;
sze[curr]--;
break;
} else if(sze[curl]) {
cout << ans[curl] << endl;
sze[curl]--;
break;
}
}
}
} else if(str == "L") {
if(sze[3]) {puts("L"); sze[3]--;}
else {
int curl = 3, curr = 3;
while(1) {
curl = max(1, curl - 1), curr = min(5, curr + 1);
if(sze[curr]) {
cout << ans[curr] << endl;
sze[curr]--;
break;
} else if(sze[curl]){
cout << ans[curl] << endl;
sze[curl]--;
break;
}
}
}
} else if(str == "XL") {
if(sze[4]) {puts("XL"); sze[4]--;}
else {
int curl = 4, curr = 4;
while(1) {
curl = max(1, curl - 1), curr = min(5, curr + 1);
if(sze[curr]) {
cout << ans[curr] << endl;
sze[curr]--;
break;
} else if(sze[curl]) {
cout << ans[curl] << endl;
sze[curl]--;
break;
}
}
}
} else if(str == "XXL") {
if(sze[5]) {puts("XXL"); sze[5]--;}
else {
int cur = 5;
while(1) {
cur = max(1, cur - 1);
if(sze[cur]) {
cout << ans[cur] << endl;
sze[cur]--;
break;
}
}
}
}
}
}
标签:XL,衣服,题解,texttt,尺码,CF46B,shirts,leqslant,XXL 来源: https://www.cnblogs.com/Eason-AC/p/15716986.html