Problem:
陣形

プログラマー養成校であるアカベ高校では、チーム戦の競技プログラマーの役割を以下の３タイプに分けています。

Ｃ：

コーダー

言語を熟知しており、コーディングを行う。

Ａ：

アルゴリズマー

論理的思考が得意であり、アルゴリズムを考える。

Ｎ：

ナビゲーター

読解力に長けており、問題の分析・デバッグをする。

この高校では以下のいずれかの陣形で３人一組のチームを構成しています。

ＣＣＡ：

バランスがとれている安定型

ＣＣＣ：

スピードを見込めるがリスクの高い速攻型

ＣＡＮ：

正確に問題を解く慎重型

競技プログラミング部のコーチであるあなたは、これらの部員をうまく組み合わせ、できるだけ多くのチームを結成できるよう、毎年気を配っています。そこで、コーダーの人数、アルゴリズマーの人数、ナビゲーターの人数が入力として与えられたとき、最大何チーム作れるかを出力するプログラムを作成してください。

入力

入力は1つのデータセットからなる。入力データは以下の形式で与えられる。

Q
c1 a1 n1
c2 a2 n2
:
cQ aQ nQ

1行目のQ(0 ≤ Q ≤ 100)はチーム数を求めたい年数である。続くQ行に各年の役割別の人数が与えられる。各行にはコーダーの人数ci(0 ≤ ci ≤ 1000)、アルゴリズマーの人数ai(0 ≤ ai ≤ 1000)、ナビゲーターの人数ni(0 ≤ ni ≤ 1000)が与えられる。

出力

年ごとに、作成できる最大のチーム数を1行に出力する。

入力例

4
3 0 0
1 1 1
9 4 1
0 1 2

出力例

1
1
4
0

Solution in JAVA (judge verdict: Accepted)

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;


public class Main {

	public static void main(String[] args) {
		Main main = new Main();
		main.teamFormationMake();
		return;
	}
	
	private void teamFormationMake() {
		
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); //標準入力
		
		try {
			
			String inputStr = bufferedReader.readLine();
			int yearNum = Integer.parseInt(inputStr); //入力される年数
			LinkedList<LinkedList<Integer>> programmerList = new LinkedList<LinkedList<Integer>>(); //プログラマのリスト
			int teamNum = 0; //年ごとのチーム数
			
			for (int i = 0; i < yearNum; i++) {
				
				String teamStr = bufferedReader.readLine();
				String[] teamStrs = teamStr.split(" ");
				programmerList.add(new LinkedList<Integer>());
				
				for (int j = 0; j < teamStrs.length; j++) {
					programmerList.get(i).add(Integer.parseInt(teamStrs[j]));
				}
			}
			
			for (int i = 0; i < yearNum; i++) {
				
				int c = programmerList.get(i).get(0);
				int a = programmerList.get(i).get(1);
				int n = programmerList.get(i).get(2);
				
				while(true) {
					
					if (c >= 1 && a >= 1 && n >= 1) {
						teamNum++;
						c--;
						a--;
						n--;
					} else if (c >= 2 && a >= 1) {
						teamNum++;
						c = c - 2;
						a--;
					} else if (c >= 3) {
						teamNum++;
						c = c - 3;
					} else {
						break;
					}
					
				}
				
				System.out.println(teamNum);
				
				teamNum = 0;
			}
			
		} catch (IOException e) {
			// TODO 自動生成された catch ブロック
			e.printStackTrace();
		}
	}
}