Codeforces Round #622 (Div. 2) 比赛人数5752
[codeforces 1313A] Fast Food Restaurant 生词太多
总目录详见https://blog.csdn.net/mrcrack/article/details/103564004
在线测评地址https://codeforces.ml/contest/1313/problem/C1
Problem | Lang | Verdict | Time | Memory |
---|---|---|---|---|
A - Fast Food Restaurant | GNU C++11 | Accepted | 31 ms | 0 KB |
生词太多是本题最大的问题,借助翻译词典,越看越糟,所以原汁原味的英文读了至少3遍。
借助Note,第一条测试样例竟然都没读懂,奇怪,每个客人拿到多少食物算法,在原文之反复查找,发现
all visitors should receive different sets of dishes
也即,每个客人只要拿到的食物,有一样,与其他人不同,即可。
手工算法如下
4 4 4
7
4 4 4
a b c
左边代表食品搭配品种 右边代表剩下的食品
a 3 4 4
a,b 3 3 4
a,b,c 3 3 3
a,b,c,ab 2 2 3
a,b,c,ab,ac 1 2 2
a,b,c,ab,ac,bc 1 1 1
a,b,c,ab,ac,bc,abc 0 0 0
共有7中搭配。
所有搭配,最多7种
以下是对食物数量,自大到小排序的说明。
2 2 3
5
2 2 3
a b c
a 1 2 3
b 1 1 3
c 1 1 2
ab 0 0 2
4种搭配,答案是5,怎么改正?
方法如下
按自大到小排序
3 2 2
a b c
5
a 2 2 2
b 2 1 2
c 2 1 1
ab 1 0 1
ac 0 0 0
答案是5
AC代码如下
扫描二维码关注公众号,回复:
9428214 查看本文章
#include <stdio.h>
int a[5];
int main(){
int t,ans,i,j,tmp;
scanf("%d",&t);
while(t--){
ans=0;
for(i=1;i<=3;i++)scanf("%d",&a[i]);
for(i=1;i<=3;i++)
if(a[i])a[i]--,ans++;
for(i=1;i<=3;i++)
for(j=i+1;j<=3;j++)
if(a[i]<a[j])tmp=a[i],a[i]=a[j],a[j]=tmp;
if(a[1]&&a[2])a[1]--,a[2]--,ans++;
if(a[1]&&a[3])a[1]--,a[3]--,ans++;
if(a[2]&&a[3])a[2]--,a[3]--,ans++;
if(a[1]&&a[2]&&a[3])ans++;
printf("%d\n",ans);
}
return 0;
}