Codeforces 727 D T-shirts Distribution
Description
有 \(6\) 种尺码的衣服,有的人只适合 \(1\) 种衣服,有的人适合相邻的 \(2\) 种,问是否存在合法方案,并输出.
Sol
贪心.
首先,只适合 \(1\) 种衣服的直接减去就好了,如果个数小于 \(0\) 了直接不合法.
然后考虑适合两种衣服的.首先就是,可以跑网络流或者二分图匹配.
一共就有 \(5\) 种情况 \((1,2),(2,3),(3,4),(4,5),(5,6)\) .
很容易的,我们就发现它其实可以贪心...
对于第 \(1\) 种情况,如果 \(1\) 号衣服有剩余的,那么就使用,然后不够就使用下一个即可.
以此类推.
排一下序,统计一下个数直接贪心就好.
Code
#include<cstdio>
#include<cstring>
#include<utility>
#include<algorithm>
#include<iostream>
using namespace std; #define mpr(a,b) make_pair(a,b)
const int N = 100005; int n,m,a[10],b[10];
int g[N];
pair< pair<int,int> , int> p[N];
pair<int,int> q[10];
pair<int,int> ans;
int sum[10]; int kind(char a[]){
if(a[0]=='S') return 1;
if(a[0]=='M') return 2;
if(a[0]=='L') return 3;
if(strlen(a)==2) return 4;
if(strlen(a)==3) return 5;
return 6;
} int main(){
for(int i=1;i<=6;i++) cin>>a[i],b[i]=a[i];
cin>>n;
// cout<<n<<endl;
for(int i=1;i<=n;i++){
char ch=getchar();
char tmp[10];int l=0;
memset(tmp,0,sizeof(tmp));
while(ch>'Z'||ch<'A') ch=getchar();
while(ch>='A'&&ch<='Z') tmp[l++]=ch,ch=getchar(); if(ch==','){
int t1=kind(tmp),t2;
ch=getchar(),l=0,memset(tmp,0,sizeof(tmp));
while(ch>'Z'||ch<'A') ch=getchar();
while(ch>='A'&&ch<='Z') tmp[l++]=ch,ch=getchar();
t2=kind(tmp);
if(t1>t2) swap(t1,t2);
p[++m]=mpr(mpr(t1,t2),i);
}else{
a[kind(tmp)]--,b[kind(tmp)]--;g[i]=kind(tmp);
if(a[kind(tmp)]<0){ puts("NO");return 0; }
}
}
sort(p+1,p+m+1); for(int i=1;i<=5;i++) q[i]=mpr(i,i+1); for(int i=1;i<=m;i++) for(int j=1;j<=5;j++) if(p[i].first==q[j]) sum[j]++; for(int i=1;i<=6;i++) if(a[i]<0){ puts("NO");return 0; } for(int i=1;i<=5;i++){
if(a[i]>=sum[i]) a[i]-=sum[i];
else{
a[i+1]-=sum[i]-a[i],a[i]=0;
}
for(int j=1;j<=6;j++) if(a[j]<0){ puts("NO");return 0; }
}
for(int i=1;i<=6;i++) if(a[i]<0){ puts("NO");return 0; }
puts("YES");
for(int i=1;i<=m;i++){
for(int j=1;j<=5;j++) if(p[i].first==q[j]){
if(b[j]>a[j]) g[p[i].second]=j,b[j]--;
else g[p[i].second]=j+1,b[j+1]--;
}
}
for(int i=1;i<=n;i++){
switch(g[i]){
case 1:puts("S");break;
case 2:puts("M");break;
case 3:puts("L");break;
case 4:puts("XL");break;
case 5:puts("XXL");break;
case 6:puts("XXXL");break;
}
} return 0;
}
Codeforces 727 D T-shirts Distribution的更多相关文章
- codeforces 798 D. Mike and distribution
D. Mike and distribution time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- codeforces 798 D. Mike and distribution(贪心+思维)
题目链接:http://codeforces.com/contest/798/problem/D 题意:给出两串长度为n的数组a,b,然后要求长度小于等于n/2+1的p数组是的以p为下表a1-ap的和 ...
- 【codeforces 798D】Mike and distribution
[题目链接]:http://codeforces.com/contest/798/problem/D [题意] 让你选一个下标集合 p1,p2,p3..pk 使得2*(a[p1]+a[p2]+..+a ...
- Codeforces 727 F. Polycarp's problems
Description 有一个长度为 \(n\) 有正负权值的序列,你一开始有一个值,每次到一个权值就加上,最少需要删掉多少数值才能到序列末尾.\(n \leqslant 750,m \leqslan ...
- 4.30-5.1cf补题
//yy:拒绝转载!!! 悄悄告诉你,做题累了,去打两把斗地主就能恢复了喔~~~ //yy:可是我不会斗地主吖("'▽'") ~~~那就听两遍小苹果嘛~~~ 五一假期除了花时间建模 ...
- 【codeforces 727D】T-shirts Distribution
[题目链接]:http://codeforces.com/problemset/problem/727/D [题意] 给你6种尺寸的衣服; 他们的尺码依次为S, M, L, XL, XXL, XXXL ...
- Codeforces Gym 100425A Luggage Distribution 二分 数学
A - Luggage DistributionTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/c ...
- 【算法系列学习】codeforces D. Mike and distribution 二维贪心
http://codeforces.com/contest/798/problem/D http://blog.csdn.net/yasola/article/details/70477816 对于二 ...
- 7-27 Codeforces Round #499 (Div. 2)
C. Fly 链接:http://codeforces.com/group/1EzrFFyOc0/contest/1011/problem/C 题型:binary search .math. 题意:总 ...
随机推荐
- 《深入理解bootstrap》读书笔记:第一章 入门准备
一.bootstrap框架简介 Bootstrap是最流行的前端开发框架. 什么是框架:开发过程的半成品. bootstrap具有以下重要特性: (1)完整的CSS样式插件 (2)丰富的预定义样式表 ...
- JavaBean简单示例
本示例说明: 从Login.jsp中输入用户名和密码,提交,在NewFile.jsp中显示信息. ----- 类要放在一个包中!!! UserB 类文件 package model; public c ...
- 数字图像处理- 3.4 空间滤波 and 3.5 平滑空间滤波器
3.4 空间滤波基础 • Images are often corrupted by random variations in intensity, illumination, or have poo ...
- window.onscroll页面滚动条滚动事件
用途一:"返回顶部": window.onscroll = function(){ var t = document.documentElement.scrollTop || do ...
- javascript函数的定义与执行
要理解javascript函数的定义与执行,首先需要知道这几个重要的概念,现在可以先知道稍后再理解! 函数的执行环境(excution context).活动对象(call object).作用域(s ...
- OC-copy
一,堆与栈 1,栈区,stack: 后进先出,由编译器自动分配并释放,一般存放函数的参数值.局部变量 2,堆区,heap:先进先出,由程序员分配和释放 3,全局区,静态区:程序结束后由系统释放, 4, ...
- php 经典的算法题你懂的
有5个人偷了一堆苹果,准备在第二天分赃.晚上,有一人遛出来,把所有菜果分成5份,但是多了一个,顺手把这个扔给树上的猴了,自己先拿1/5藏了.没想到其他四人也都是这么想的,都如第一个人一样分成5份把多的 ...
- jQuery.validator 详解二
前言:上一篇详细的介绍了jQuery.validator( 版本v1.13.0 )的验证规则,这一篇重点讲述它的源码结构,及如何来对元素进行验证,错误消息提示的内部实现 一.插件结构(组织方式) 在讲 ...
- C#深入浅出 关键字(一)
1.this this关键字用于指示当前对象“自己”,来看一个例子,了解什么时候需要用this class Star { String name; int age; public void SetIn ...
- linux 分区问题
一.最简单的分区 仅分出根目录(/)和最简单的内存置换空间(swap)即可 以虚拟机的分区(20G)为例: 一般给/分15G来安装linux系统,512M给swap,另外的4G可以留下备用 二.复杂一 ...