Lilliput Steps

小さな一歩から着実に. 数学やプログラミングのことを書きます.

AOJ 1077 - The Great Summer Contest

問題文 : The Great Summer Contest

解法 :
2つのペアをグループ化することが出来るので, 2つのペアをグループ化する.
4番目のタイプのコンテストは, 3つあると1 ~ 3番目のコンテストを1回ずつ開くのと同義になるので0回, 1回, 2回開く場合を考えて貪欲的にコンテスト数を求める.

コード:

#include <stdio.h>

#define max(a, b) ((a) > (b) ? (a) : (b))

int main(void)
{
    int i, j;
	int s;
    int n[6], g[3], c[3];
    int ans;
    while (1){
        s = 0;
        for (i = 0; i < 6; i++){
            scanf("%d", &n[i]);
            s += n[i];
        }
        
        if (s == 0){
            break;
        }
        
        for (i = 0; i < 3; i++){
            g[i] = n[i] + n[i + 3];
        }
		
		ans = 0;
		
		for (i = 0; i < 3; i++){
			for (j = 0; j < 3; j++){
				c[j] = g[j] - i;
				if (c[j] < 0){
					c[j] = -999999;
				}
			}
			ans = max(ans, i + c[0] / 3 + c[1] / 3 + c[2] / 3);
		}
		
		printf("%d\n", ans);
    }
    
    return (0);
}