李白打酒---第五回ブルーブリッジ杯


ところで、大詩人の李白さんは、一生おいしいです.幸いにも彼は車を運転しなかった.
    ある日、彼はポットを持って、家から出てきて、ポットの中に酒が2斗あります.彼は歩きながら歌った.
    用事がなくて街を歩いて、ポットを持ってお酒を飲みに行きます.
    店に会うと倍になり,花に会うと1斗飲む.
    この道で、彼は全部で店に5回、花に10回出会った.最後に出会ったのは花だと知っていたが、彼はちょうど酒を飲み干した. 
    李白が店と花に出会う順番を計算してください.店に会うのをa、花に会うのをbと書くことができます.則:babaabbabbabbbbbb 合理的な順序です.このような答えは全部でいくらですか?すべての可能なシナリオの個数(テーマが与えられたものを含む)を計算してください.
public class      {
	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		int sum = 1 << 15;
		int jiu = 2;
		int a, b;
		int count = 0;
		char c[] = new char[15];
		//  0  a,1  b
		for (int i = 1; i < sum; i++) {
			a = 0;
			b = 0;
			jiu = 2;
			for (int j = 0; j <= 14; j++) {
				//           
				if (((i >> 14) & 1) == 0)
					break;
				int temp = (i >> j) & 1;

				if (temp == 0) {
					if (a >= 5)//             
						break;
					jiu = jiu * 2;
					a++;
					c[j] = 'a';
				} else if (temp == 1) {
					if (b >= 10)
						break;
					jiu--;
					b++;
					c[j] = 'b';
				}
				if (jiu < 0)//             
					break;
			}
			if (jiu == 0 && a == 5 && b == 10) {
				count++;
				print(new String(c));
			}
		}
		print("      :" + count + " ");
		long end = System.currentTimeMillis();
		print("     ,      " + ((end - start) / 1000.0) + " .");
	}

	public static void print(Object o) {
		System.out.println(o.toString());
	}
}

結果:
b a b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b a b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b b