codeforces 的 Codeforces Round #273 (Div. 2) --C Table Decorations

C. Table Decorations
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

You have r red, g green and b blue balloons. To decorate a single table for the banquet you need exactly three balloons. Three balloons attached to some table shouldn't have the same color. What maximum number t of tables can be decorated if we know number of balloons of each color?

Your task is to write a program that for given values rg and b will find the maximum number t of tables, that can be decorated in the required manner.

Input

The single line contains three integers rg and b (0 ≤ r, g, b ≤ 2·109) — the number of red, green and blue baloons respectively. The numbers are separated by exactly one space.

Output

Print a single integer t — the maximum number of tables that can be decorated in the required manner.

Sample test(s)
input
output
input
output
input
output
Note

In the first sample you can decorate the tables with the following balloon sets: "rgg", "gbb", "brr", "rrg", where "r", "g" and "b" represent the red, green and blue balls, respectively.

 

  从网上找到两种代码,算法的核心思路是一样的。有待仔细研究一下,我想过要用该路的问题,但好像又行不通。

  最后演变成了规律性的解。

 

#include <stdio.h>
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    using namespace std;
    long long r;
    long long g,b,ans;
    int main()
    {
         scanf("%I64d%I64d%I64d",&r,&g,&b);
         
         ans=min(min(min((r+g+b)/3,r+g),r+b),b+g);
         
         printf("%I64d\n",ans);
         
         return 0;
    }

 

 

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
#define INF 0x7fffffff

long long a[4], t;

int main()
{
  #ifdef sxk
    freopen("in.txt","r",stdin);
  #endif
  int n;
  while(scanf("%lld%lld%lld",&a[0], &a[1], &a[2])!=EOF)
  {
    sort(a, a+3);
    if(a[2] > 2*(a[0]+a[1])) t = a[0] + a[1];
    else
    t = (a[0]+a[1]+a[2])/3;
    printf("%lld\n", t);
  }
  return 0;
}

 

 

posted @ 2014-10-25 12:24  我喜欢旅行  阅读(349)  评论(0编辑  收藏  举报