Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 710 Accepted Submission(s): 501

Problem Description

Bob and Alice are playing a new game. There are n boxes which have been numbered from 1 to n. Each box is either empty or contains several cards. Bob and Alice move the cards in turn. In each turn the corresponding player should choose a non-empty box A and choose another box B that B< A && (A+B)%2=1 && (A+B)%3=0. Then, take an arbitrary number (but not zero) of cards from box A to box B. The last one who can do a legal move wins. Alice is the first player. Please predict who will win the game.

Input

The first line contains an integer T (T<=100) indicating the number of test cases. The first line of each test case contains an integer n (1<=n<=10000). The second line has n integers which will not be bigger than 100. The i-th integer indicates the number of cards in the i-th box.

Output

For each test case, print the case number and the winner’s name in a single line. Follow the format of the sample output.

Sample Input

2

2

1 2

7

1 3 3 2 2 1 2

Sample Output

Case 1: Alice

Case 2: Bob

【题目链接】:http://acm.hdu.edu.cn/showproblem.php?pid=3389

【题解】



/*

题目所给的条件其实可以简化成A+B == 6n+3;

也就是说(A+B)%6 == 3;

则对于可以互相传递纸牌的两个位置x,y(x< y)

(x+y)%6==3;

根据同余率;

(x%6+y%6)%6==3;

所以设x%6为a,y%6为b;

则可以传递纸牌的条件是

①a=0,b=3

②a=3,b=0

③a=1,b=2

④a=2,b=1

⑤a=4,b=5

⑥a=5,b=4

假设没有③..⑥这些能够传递纸牌的情况;只考虑①和②能传递纸牌;

则传递顺序必然是这样的(下面的数字都是下标从大到小%6后的结果)

0->3->0->3….->0->3



3->0->3->0….->0->3

最后一个传递到的数字一定是数字3(因为不能传递到数字0了);

这其实很像阶梯博弈了

【阶梯博弈】http://blog.csdn.net/harlow_cheng/article/details/54024055

我们只要对下标为%6为0的堆做NIM博弈就好了嘛

即把0传递给3的过程看作是把%6==0的下标的堆的“石头”扔掉;

(如果对方也一直在对0操作,则你的胜败肯定和0的那些堆的异或值决定的结果一样)

如果对方对3进行了一次操作->即传递给了0,那么你就把传递给0的牌等量地传递给3

这样又保持了0堆你是必胜的状态;且总是由你把0堆上的牌传递给3堆上的牌(或总是对方。。)

所以只要对0堆(i%6==0)的所有牌数异或就好了->作为第一个游戏的sg函数

③和④的情况

对应

2->1->2->1->2….->2->1 (1不能再变成2了!)



1->2->1->2->1….->2->1

则对2堆进行nim博弈(i%6==2的堆的异或值)->作为第二个游戏的sg函数

④和⑤

对应

5->4->5->4->5….->5->4 (1不能再变成2了!)



4->5->4->5->4….->5->4

则对5对进行nim博弈(i%6==5的堆的异或值)->作为第三个游戏的sg函数

把三个游戏的sg函数再异或一下;则为整个游戏的sg函数了;

为0则先手胜,否则先手输;

因为异或有交换律;

所以直接异或i%6==0,2,5的堆就好了;不必按顺序真的一个一个游戏搞sg函数;

*/



【完整代码】

#include <bits/stdc++.h>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define rei(x) scanf("%d",&x)
#define rel(x) scanf("%I64d",&x) typedef pair<int,int> pii;
typedef pair<LL,LL> pll; //const int MAXN = x;
const int dx[9] = {0,1,-1,0,0,-1,-1,1,1};
const int dy[9] = {0,0,0,-1,1,-1,1,-1,1};
const double pi = acos(-1.0); int main()
{
//freopen("F:\\rush.txt","r",stdin);
int T;
rei(T);
rep1(ii,1,T)
{
int n,ans = 0;
rei(n);
rep1(i,1,n)
{
int x;
rei(x);
if (i%6==0 || i%6==2 || i%6==5)
ans = ans ^ x;
}
if (ans==0)
printf("Case %d: Bob\n",ii);
else
printf("Case %d: Alice\n",ii);
}
return 0;
}

【hdu 3389】Game的更多相关文章

  1. 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题

    [HDU  3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...

  2. 【HDU 5647】DZY Loves Connecting(树DP)

    pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...

  3. -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】

    [把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...

  4. 【HDU 2196】 Computer(树的直径)

    [HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...

  5. 【HDU 2196】 Computer (树形DP)

    [HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...

  6. 【HDU 5145】 NPY and girls(组合+莫队)

    pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...

  7. 【hdu 1043】Eight

    [题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=1043 [题意] 会给你很多组数据; 让你输出这组数据到目标状态的具体步骤; [题解] 从12345 ...

  8. 【HDU 3068】 最长回文

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3068 [算法] Manacher算法求最长回文子串 [代码] #include<bits/s ...

  9. 【HDU 4699】 Editor

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4699 [算法] 维护两个栈,一个栈放光标之前的数,另外一个放光标之后的数 在维护栈的同时求最大前缀 ...

随机推荐

  1. 导入数据库工具有关的oracle sql操作

    alter table TAB_user add (personal varchar2(30) default '用户名' not null);alter table TAB_user modify ...

  2. 一次Linux磁盘损坏导致系统不可用恢复实例

    Linux操作系统的server重新启动后.系统启动报错,系统无法正常使用. 1.报错信息 1.1.报错屏幕信息 1.2.报错信息提取关键信息 (1)/dev/sda3:File -(inode #1 ...

  3. [JWT] JWT Signature With RS256 - Learn The Advantages Compared to HS256

    The advantage of RS256 over HS256 is RS256 no longer need to share the secret key between client and ...

  4. 强连通分量分解 Kosaraju算法 (poj 2186 Popular Cows)

    poj 2186 Popular Cows 题意: 有N头牛, 给出M对关系, 如(1,2)代表1欢迎2, 关系是单向的且能够传递, 即1欢迎2不代表2欢迎1, 可是假设2也欢迎3那么1也欢迎3. 求 ...

  5. Qt源码分析之信号和槽机制(QMetaObject是一个内部struct)

    Qt的信号和槽机制是Qt的一大特点,实际上这是和MFC中的消息映射机制相似的东西,要完成的事情也差不多,就是发送一个消息然后让其它窗口响应,当然,这里的消息是广义的说法,简单点说就是如何在一个类的一个 ...

  6. 06 Jenkins自动化构建

    • 在之前的freestyle任务基础上,实现构建功能• 检查maven环境• 构建命令:mvn clean compile• 归档构建产物• 演练参数的使用• 通过配置Trigger进行自动构建• ...

  7. ASP.NET MVC 入门4、Controller与Action

    原帖地址:http://www.cnblogs.com/QLeelulu/archive/2008/10/04/1303672.html Controller是MVC中比較重要的一部分.差点儿全部的业 ...

  8. python3 求斐波那契数列(Fibonacci sequence)

    输出斐波那契数列的前多少个数. 利用函数 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan # ----斐波那契数列( ...

  9. JMeter--聚合报告之 90% Line 正确理解

    90% Line 参数正确的含义: 虽然,我的上面理解有一定的道理,显然它(90% 用户的响应时间)是错误的.那看看JMeter 官网是怎么说的? 90% Line - 90% of the samp ...

  10. 【Codeforces Round #432 (Div. 1) B】Arpa and a list of numbers

    [链接]h在这里写链接 [题意] 定义bad list是一个非空的.最大公约数为1的序列.给定一个序列,有两种操作:花费x将一个元素删除.花费y将一个元素加1,问你将这个序列变为good list所需 ...