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的更多相关文章

  1. codeforces 798 D. Mike and distribution

    D. Mike and distribution time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  2. codeforces 798 D. Mike and distribution(贪心+思维)

    题目链接:http://codeforces.com/contest/798/problem/D 题意:给出两串长度为n的数组a,b,然后要求长度小于等于n/2+1的p数组是的以p为下表a1-ap的和 ...

  3. 【codeforces 798D】Mike and distribution

    [题目链接]:http://codeforces.com/contest/798/problem/D [题意] 让你选一个下标集合 p1,p2,p3..pk 使得2*(a[p1]+a[p2]+..+a ...

  4. Codeforces 727 F. Polycarp's problems

    Description 有一个长度为 \(n\) 有正负权值的序列,你一开始有一个值,每次到一个权值就加上,最少需要删掉多少数值才能到序列末尾.\(n \leqslant 750,m \leqslan ...

  5. 4.30-5.1cf补题

    //yy:拒绝转载!!! 悄悄告诉你,做题累了,去打两把斗地主就能恢复了喔~~~ //yy:可是我不会斗地主吖("'▽'") ~~~那就听两遍小苹果嘛~~~ 五一假期除了花时间建模 ...

  6. 【codeforces 727D】T-shirts Distribution

    [题目链接]:http://codeforces.com/problemset/problem/727/D [题意] 给你6种尺寸的衣服; 他们的尺码依次为S, M, L, XL, XXL, XXXL ...

  7. Codeforces Gym 100425A Luggage Distribution 二分 数学

    A - Luggage DistributionTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/c ...

  8. 【算法系列学习】codeforces D. Mike and distribution 二维贪心

    http://codeforces.com/contest/798/problem/D http://blog.csdn.net/yasola/article/details/70477816 对于二 ...

  9. 7-27 Codeforces Round #499 (Div. 2)

    C. Fly 链接:http://codeforces.com/group/1EzrFFyOc0/contest/1011/problem/C 题型:binary search .math. 题意:总 ...

随机推荐

  1. TCP/UDP端口列表

    http://zh.wikipedia.org/wiki/TCP/UDP%E7%AB%AF%E5%8F%A3%E5%88%97%E8%A1%A8 TCP/UDP端口列表     本条目可通过翻译外语维 ...

  2. 20145212 《Java程序设计》第6周学习总结

    20145212 <Java程序设计>第6周学习总结 学习内容总结 第十章 1.Java将输入/输出抽象化为串流.读取数据对象成为输入流,能向其写入的对象叫输出流. 我从网上找到了一个可以 ...

  3. typedef和#define的用法与区别

    typedef和#define的用法与区别 typedef和#define的用法与区别 一.typedef的用法 在C/C++语言中,typedef常用来定义一个标识符及关键字的别名,它是语言编译过程 ...

  4. ansible执行playbook时间显示的python脚本

    import datetime import os import time from ansible.plugins.callback import CallbackBase class Callba ...

  5. JVM 小结

    1.jvm虚拟机的种类及特点 Sun Classic:解释和编译不能协调使用:使用基于句柄的对象查找. Exact VM:解释和编译能协调使用:采用准确式内存管理:可以知道内存中某个位置的数据是什么类 ...

  6. Why is applicationhost.config still being added to source control even thought it's in gitignore

      Why is applicationhost.config still being added to source control even thought it's in gitignore g ...

  7. fedora23忘记root密码怎么办??

    fedora23使用的是uefi, 不是 传统的grub 所以在编辑grub的时候, 跟以前的版本略有不同 最最重要的是: 在编辑启动条目的时候, 那个 linuxefi ... vmlinuz... ...

  8. HITtrainning20140417题解

    题目列表:     ID Origin Title 10 / 15 Problem A FZU 2152 文件系统   0 / 16 Problem B FZU 2153 A simple geome ...

  9. 单例模式singleton

    在进行开发的时候,我们在有些情形下有些对象我们只需要一个.例如:配置文件.工具类.线程池.缓存.日志对象等. 如何保证我们的对象只有一个呢?我们可以通过单例来实现. 常用的单例有两种:饿汉模式和懒汉模 ...

  10. 2015年12月02日 GitHub入门学习(四)Git操作

    序,学习使用Git是一项新技能,你将了解到Git与SubVersion的区别. 一.基本操作 git init 初始化仓库,请实际建立一个目录并初始化仓库,.git目录里存储着管理当前目录内容所需的仓 ...