CF1313A. Fast Food Restaurant题解

description:

  • 你做了三道菜,每道菜的碟数分别为 a , b , c a,b,c a,b,c
  • 每个食客至少要吃一种菜,且每种菜最多能吃一碟。
  • 问你最多能招待多少个食客。
  • 多组数据,数据组数不多于 500 500 500
  • 0 ≤ a , b , c ≤ 10 0\le a,b,c\le 10 0a,b,c10
  • translate by @ShineEternal。

solution:

我们发现,最多只能招待以下 7 7 7 个不同的食客:

  • 只吃 a a a
  • 只吃 b b b
  • 只吃 c c c
  • 只吃 a , b a,b a,b
  • 只吃 b , c b,c b,c
  • 只吃 a , c a,c a,c
  • a , b , c a,b,c a,b,c 每道都吃。

所以我们只需要判断这 7 7 7 种情况即可。

唯一要注意的一点要先吃碟数多的,因为碟数多就意味着可能他能多组成几道菜。

例如:

a = 1 , b = 1 , c = 2 a=1,b=1,c=2 a=1,b=1,c=2

那么如果来一套 a , b a,b a,b 餐,就不如 a , c ∥ b , c a,c\|b,c a,cb,c 各来一套。

code:

#include
#include
using namespace std;
int d[5];
int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		int cnt=0;
		int a,b,c;
		scanf("%d%d%d",&a,&b,&c);
		d[1]=a;
		d[2]=b;
		d[3]=c;
		sort(d+1,d+4);
		a=d[3];
		b=d[2];
		c=d[1];
		//printf("%d %d %d\n",a,b,c);
		if(a>0)
		{
			cnt++;
			a--;
		}
		if(b>0)
		{
			cnt++;
			b--;
		}
		if(c>0)
		{
			cnt++;
			c--;
		}
		if(a>0&&b>0)
		{
			cnt++;
			a--;
			b--;
		}
		if(a>0&&c>0)
		{
			cnt++;
			a--;
			c--;
		}
		if(b>0&&c>0)
		{
			cnt++;
			b--;
			c--;
		}
		if(a>0&&b>0&&c>0)
		{
			cnt++;
			a--;
			b--;
			c--;
		}
		printf("%d\n",cnt);
	}
	return 0;
} 

你可能感兴趣的:(codeforces刷题题解)