来源:http://acm.hdu.edu.cn/showproblem.php?pid=4023
/*
题意:Alice有一种1*2的瓷砖,Bob分别有一种2*1的瓷砖,现在有15种形状的图形,
Alice和Bob轮流在上面放瓷砖,谁不能放,谁就输。
分析:是一个贪心+模拟+博弈的题,根据图形来看,可把图形分类为
(1)、(2)、(3,4)、(5,6)、(7,8)、(9,10)、(11,12,13,14)、(15)这几类。
其中(1)肯定是Alice的,(2)他不能选,剩下的选择优先顺序应该是
(15)、(5,6)、(3,4)、(15)、(11,12,13,14)、(7,8)、(9,10);
其中(2)肯定是Bob的,(1)他不能选,剩下的选择优先顺序应该是
(15)、(3,4)、(5,6)、(15)、(11,12,13,14)、(9,10)、(7,8);
然后直接模拟,计算谁先不能走谁就输了。
*/
#include <iostream>
#include <cstdio>
using namespace std;
int a[26];
int alice,bob;
bool v1()
{
if (a[15]!=0){a[15]--;alice++;return 1;}
if (a[5]!=0){a[5]--;alice++;return 1;}
if (a[6]!=0){a[6]--;alice++;return 1;}
if (a[3]!=0){a[3]--;return 1;}
if (a[4]!=0){a[4]--;return 1;}
if (a[11]!=0){a[11]--;return 1;}
if (a[12]!=0){a[12]--;return 1;}
if (a[13]!=0){a[13]--;return 1;}
if (a[14]!=0){a[14]--;return 1;}
if (a[7]!=0){a[7]--;return 1;}
if (a[8]!=0){a[8]--;return 1;}
if (a[9]!=0){a[9]--;bob++;return 1;}
if (a[10]!=0){a[10]--;bob++;return 1;}
if (alice!=0){alice--;return 1;}
return 0;
}
bool v2()
{
if (a[15]!=0){a[15]--;bob++;return 1;}
if (a[3]!=0){a[3]--;bob++;return 1;}
if (a[4]!=0){a[4]--;bob++;return 1;}
if (a[5]!=0){a[5]--;return 1;}
if (a[6]!=0){a[6]--;return 1;}
if (a[11]!=0){a[11]--;return 1;}
if (a[12]!=0){a[12]--;return 1;}
if (a[13]!=0){a[13]--;return 1;}
if (a[14]!=0){a[14]--;return 1;}
if (a[9]!=0){a[9]--;return 1;}
if (a[10]!=0){a[10]--;return 1;}
if (a[7]!=0){a[7]--;alice++;return 1;}
if (a[8]!=0){a[8]--;alice++;return 1;}
if (bob!=0){bob--;return 1;}
return 0;
}
int main()
{
int T,an=1;
scanf ("%d",&T);
while (T--)
{
for (int i=1;i<=15;i++)
scanf ("%d",&a[i]);
alice = a[1]*2;
bob = a[2]*2;
bool f=1;
while (1)
{
if (!v1()){f=0;break;}
if (!v2())break;
}
printf ("Case #%d: ",an++);
if (!f)printf("Bob\n");
else printf ("Alice\n");
}
return 0;
}