ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CF46B T-shirts from Sponsor 题解

2021-12-21 20:34:58  阅读:145  来源: 互联网

标签:XL 衣服 题解 texttt 尺码 CF46B shirts leqslant XXL


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有