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;
}
}
}
}
}
}
CF46B T-shirts from Sponsor 题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- 面向对象中static的理解(1)
class 对象名字{ data members; static data members; function members; static function members; } 每创建一个对象, ...
- java实现自动化发布平台核心代码
1.搭建jenkins环境 (1)jenkins官网下载jenkins.war包 (2)将该war包放入到tomcat的webapp的目录下(前提条件需要配置tomcat的环境,详情请自行百度) (3 ...
- Go Micro Dashboard - 简介
前言 使用Go Micro开发微服务系统很久了,但是一直没有很好的可视化工具用于开发和监控微服务系统. 所以基于go-micro和ng-alain开发了Go Micro Dashboard,目前已经支 ...
- vue 数据单项绑定
提供get方法,修改数据不改原来数据,进行单向绑定,还可以做数据缓存,减少服务器压力. 提供单独的set方法.
- 互联网java面试宝典
1.为什么使用消息队列啊? 答题: 消息队列的核心功能就是:解耦合,异步,流量削峰解耦:接口调用发送,那如果E系统也要这个数据呢?那如果C系统现在不需要了呢?现在A系统又要发送第二种数据了呢?A系统负 ...
- 快速入门上手Markdown
第一次接触Markdown是写代码初期看很多大佬的github,他们的项目一定会有一份文件叫Readme.md的文件 他们由一些简单美观的符号和汉字字母组成,编译之后成为一篇简单直观的文档 深入了解之 ...
- Codeforces 1158F - Density of subarrays(dp,神仙题)
Codeforces 题目传送门 & 洛谷题目传送门 人生中第一道 *3500(显然不是自己独立 AC 的),不过还是祭一下罢 神仙 D1F 首先考虑对于给定的序列 \(a_1,a_2,\do ...
- bitset 的妙用:乱搞字符串匹配
最近碰到了几次 bitset 乱搞字符串匹配的情况,故写文以记之. 1. 算法简介 核心思想:假设文本串为 \(s\),则对字符集中的每一个字符 \(c\) 开一个大小为 \(|s|\) 的 bits ...
- Matlab流体后处理中的奇淫巧术总结
Matlab流体后处理中的奇淫巧术总结 主要参考\demos\volvec.m示例 1.等值面绘制 %% Isosurface of MRI Data cla load mri D = squeeze ...
- Oracle、MySQL关机操作步骤
一.Oracle数据库单机关机(eg:LEAP系统) 先关闭使用数据库的应用系统,再关闭数据库 关闭数据库执行以下命令 1.关闭Oracle数据库监听器:(使用操作系统下管理Oracle的账户,关闭监 ...