【hdu 3389】Game
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的更多相关文章
- 【数位dp】【HDU 3555】【HDU 2089】数位DP入门题
[HDU 3555]原题直通车: 代码: // 31MS 900K 909 B G++ #include<iostream> #include<cstdio> #includ ...
- 【HDU 5647】DZY Loves Connecting(树DP)
pid=5647">[HDU 5647]DZY Loves Connecting(树DP) DZY Loves Connecting Time Limit: 4000/2000 MS ...
- -【线性基】【BZOJ 2460】【BZOJ 2115】【HDU 3949】
[把三道我做过的线性基题目放在一起总结一下,代码都挺简单,主要就是贪心思想和异或的高斯消元] [然后把网上的讲解归纳一下] 1.线性基: 若干数的线性基是一组数a1,a2,a3...an,其中ax的最 ...
- 【HDU 2196】 Computer(树的直径)
[HDU 2196] Computer(树的直径) 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 这题可以用树形DP解决,自然也可以用最直观的方法解 ...
- 【HDU 2196】 Computer (树形DP)
[HDU 2196] Computer 题链http://acm.hdu.edu.cn/showproblem.php?pid=2196 刘汝佳<算法竞赛入门经典>P282页留下了这个问题 ...
- 【HDU 5145】 NPY and girls(组合+莫队)
pid=5145">[HDU 5145] NPY and girls(组合+莫队) NPY and girls Time Limit: 8000/4000 MS (Java/Other ...
- 【hdu 1043】Eight
[题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=1043 [题意] 会给你很多组数据; 让你输出这组数据到目标状态的具体步骤; [题解] 从12345 ...
- 【HDU 3068】 最长回文
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3068 [算法] Manacher算法求最长回文子串 [代码] #include<bits/s ...
- 【HDU 4699】 Editor
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4699 [算法] 维护两个栈,一个栈放光标之前的数,另外一个放光标之后的数 在维护栈的同时求最大前缀 ...
随机推荐
- [CSS] Build a Fluid Loading Animation in CSS
In this lesson, we will create a fluid loading animation using Animations and Transformations in CSS ...
- 网页设计实战3 ufo类型的科技网页如何实现
网页设计实战3 ufo类型的科技网页如何实现 一.总结 一句话总结:基础的图片素材就是如何几张图片,这个效果只是通过jquery或者js让那个png图片旋转起来了,如此而已.其实核心就是一个trans ...
- android问题及其解决-优化listView卡顿和怎样禁用ListView的fling
问题解决-优化listView卡顿和怎样禁用ListView的fling 前戏非常长,转载请保留出处:http://blog.csdn.net/u012123160/article/details/4 ...
- uva 1463 - Largest Empty Circle on a Segment(二分+三分+几何)
题目链接:uva 1463 - Largest Empty Circle on a Segment 二分半径,对于每一个半径,用三分求出线段到线段的最短距离,依据最短距离能够确定当前R下每条线段在[0 ...
- 跟我一起学extjs5(42--单个模块的数据新增方式)
跟我一起学extjs5(42--单个模块的数据新增方式) 前面的章节中已经增加了一个自己定义的模块,而且能够进行数据的新增.改动.删除的操作了,在这个基础上就能够大作文章了. 这一节来 ...
- PHP路由技术的原理与实践
0x00 路由实现原理 用户通过指定的URL范式对后台进行訪问.URL路由处理类进行处理后.转发到逻辑处理类,逻辑处理类将请求结果返回给用户. 约定URL范式和规则 约定一套自己喜欢的,对搜索引擎友好 ...
- PHP从数组中删除元素的四种方法实例
PHP从数组中删除元素的四种方法实例 一.总结 一句话总结:unset(),array_splice(),array_diff(),array_diff_key() 二.PHP从数组中删除元素的四种方 ...
- HTTP网络协议(四)
确保Web安全的HTTPS HTTP存在三个比较明显的缺点: 通信使用明文(不加密),内容可能会被窃听. 不验证通信方的身份,因此有可能遭遇伪装. 无法证明报文的完整性,所以可能已遭篡改. 尽管HT ...
- python3 turtle画正方形、矩形、正方体、五角星、奥运五环
python3 环境 turtle模块 分别画出 正方形.矩形.正方体.五角星.奥运五环 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:H ...
- 如何在本地运行查看github上的开源项目
看中了一款很多星星的github的项目,想把这个项目拉到自己的电脑上运行查看项目效果,该怎么做?示例:我们今天要看的 github项目地址:https://github.com/lzxb/vue-cn ...