感激的花束 题解
题目描述:
南星国的某J从小受某X照顾,有一天,他决定送些花束感激X君。
他觉得,虽然,送花什么的很狗血,但是,某J是个传统的人,所以,他还是打算送了。
在某X的家乡,有个奇怪的习俗,一个花束只能有3朵花,要么是三种不同色的,要么是一种色的。
花束送得越多,表示爱意越浓。现在某J所在的花店有红橙黄绿蓝靛紫七种颜色的花。
花店的南南老板有个怪癖。到她店里来买花的人,最多可以选三种颜色。
某J告诉南南老板,他想送最多的花束来表达他对X的敬意,聪明的南南老板听了某J的描述后,立马就知道了最多能有多少花束。你知道吗?
输入:
有多组输入,每组第一行输入一个整数T(1<= T <=1000),表示有T组,接下来的T行分别有7个整数(0<=ai<=10^9,i=1,2,....,7)分别表示7种不同颜色的花的数量。
输出:
首先输出当前Case k:,k表示第几组,接下来是n行结果。
样例输入:
2
1 1 1 1 2 2 2
2 0 3 4 2 9 1
3
3 4 6 1 0 2 3
0 4 2 3 0 7 1
0 0 0 0 0 0 0
样例输出:
Case 1:
2
5
Case 2:
4
4
0
C++代码:
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int inn[11];
inline int query()
{
return inn[4]/3 + inn[5]/3 + inn[6]/3;
}
int main(int argc, const char * argv[])
{
int t,tt = 0;
while(~scanf("%d", &t))
{
printf("Case %d:\n",++tt);
while(t--)
{
for(int i=0;i<7;++i)
{
scanf("%d",&inn[i]);
}
sort(inn,inn+7);
int result = 0;
result = query();
if(inn[4])
{
--inn[4];
--inn[5];
--inn[6];
result = max(result,1+query());
}
if(inn[4])
{
--inn[4];
--inn[5];
--inn[6];
result = max(result,2+query());
}
if(inn[4])
{
--inn[4];
--inn[5];
--inn[6];
result = max(result,3+query());
}
printf("%d\n",result);
}
}
return 0;
}
#include <iostream>
#include <cstring>
using namespace std;
int inn[11];
inline int query()
{
return inn[4]/3 + inn[5]/3 + inn[6]/3;
}
int main(int argc, const char * argv[])
{
int t,tt = 0;
while(~scanf("%d", &t))
{
printf("Case %d:\n",++tt);
while(t--)
{
for(int i=0;i<7;++i)
{
scanf("%d",&inn[i]);
}
sort(inn,inn+7);
int result = 0;
result = query();
if(inn[4])
{
--inn[4];
--inn[5];
--inn[6];
result = max(result,1+query());
}
if(inn[4])
{
--inn[4];
--inn[5];
--inn[6];
result = max(result,2+query());
}
if(inn[4])
{
--inn[4];
--inn[5];
--inn[6];
result = max(result,3+query());
}
printf("%d\n",result);
}
}
return 0;
}