【codeforces 727D】T-shirts Distribution
2017-10-04 18:44
253 查看
【题目链接】:http://codeforces.com/problemset/problem/727/D
【题意】
给你6种尺寸的衣服;
他们的尺码依次为S, M, L, XL, XXL, XXXL;
给你每种衣服的件数;
以及每个人想要的衣服种类;
(但有些人可能不知道自己要的是哪一种衣服,则他们对这相邻的两种衣服都接受)
然后让你去分配这6种衣服;
让每个人都满意;
【题解】
对于单个选择的;直接让他们满意;
给他们想要的;
对于相邻选择的;
考虑”S,M”,”M,L”,”L,XL”,”XL,XXL”,”XXL,XXXL”
可以看到S只有一种人要,其他的人都不会要S了
所以对于选择S、M的,
优先把S衣服给它;
如果S不够了,再分M的;
如果不行、就无解;
这样我们又把S、M的排除掉了,
对于剩下的
“M,L”,”L,XL”,”XL,XXL”,”XXL,XXXL”
M也只有一种人要;
则对于M、L也优先分配M;
不足的再用L补
很棒的贪心
【Number Of WA】
0
【完整代码】
#include <bits/stdc++.h> using namespace std; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 #define LL long long #define rep1(i,a,b) for (int i = a;i <= b;i++) #define rep2(i,a,b) for (int i = a;i >= b;i--) #define mp make_pair #define pb push_back #define fi first #define se second #define ms(x,y) memset(x,y,sizeof x) typedef pair<int,int> pii; typedef pair<LL,LL> pll; const int dx[9] = {0,1,-1,0,0,-1,-1,1,1}; const int dy[9] = {0,0,0,-1,1,-1,1,-1,1}; const double pi = acos(-1.0); const int N = 1e5+100; const string idx[11]={"S","M","L","XL","XXL","XXXL","S,M","M,L","L,XL","XL,XXL","XXL,XXXL"}; int now[6],n,p ,ans ; string s; int zzk(string t) { rep1(i,0,10) if (idx[i]==t) return i; } int main() { //freopen("F:\\rush.txt","r",stdin); ios::sync_with_stdio(false),cin.tie(0);//scanf,puts,printf not use rep1(i,0,5) cin>>now[i]; cin>>n; rep1(i,1,n) { cin >> s; rep1(j,0,10) if (s == idx[j]) p[i] = j; } rep1(i,1,n) if (p[i]<=5) { if (now[p[i]]) { now[p[i]]--; ans[i] = p[i]; } else return cout << "NO"<<endl,0; } rep1(k,6,10) { int pos = idx[k].find(',',0); int p1 = zzk(idx[k].substr(0,pos)),p2 = zzk(idx[k].substr(pos+1,10)); //cout <<p1<<' '<<p2<<endl; rep1(i,1,n) if (p[i]==k) { if (now[p1]) { now[p1]--; ans[i] = p1; continue; } if (now[p2]) { now[p2]--; ans[i] = p2; continue; } return cout << "NO"<<endl,0; } } cout <<"YES"<<endl; rep1(i,1,n) cout << idx[ans[i]] << endl; return 0; }
相关文章推荐
- CodeForces #?(727A|727B|727D|727F)|贪心|动态规划
- Codeforces 727D-T-shirts Distribution
- Codeforces 727D
- CodeForces 289B Polo the Penguin and Matrix
- Codeforces 660C Hard Process【二分】经典题!好题!
- Codeforces contest 295 recordings
- CodeForces 327 E.Axis Walking(折半枚举+map)
- Codeforces 430 B. Balls Game
- codeforces 577A(暴力枚举)
- Codeforces 691A Fashion in Berland
- Codeforces 761A-Dasha and Stairs
- 【CodeForces】426Div2 A The Useless Toy
- CodeForces 367 E.Sereja and Intervals(组合数学+dp)
- codeforces 432c Prime Swaps
- codeforces 295B B. Greg and Graph(floyd+dp)
- Codeforces 691C Exponential notation
- Codeforces 685E Travelling Through the Snow Queen's Kingdom(DP)
- CodeForces 833 B.The Bakery(dp+线段树)
- Codeforces 887D - Ratings and Reality Shows
- Codeforces 431B Shower Line