Description

一共n×m个硬币,摆成n×m的长方形。dongdong和xixi玩一个游戏,每次可以选择一个连通块,并把其中的硬币全部翻转,但是需要满足存在一个硬币属于这个连通块并且所有其他硬币都在它的左上方(可以正左方也可以正上方),并且这个硬币是从反面向上翻成正面向上。dongdong和xixi轮流操作。如果某一方无法操作,那么他(她)就输了。dongdong先进行第一步操作,假设双方都采用最优策略。问dongdong是否有必胜策略。

Input

第一行一个数T,表示他们一共玩T局游戏。
接下来是T组游戏描述。每组游戏第一行两个数n;m,
接下来n行每行m个字符,第i行第j个字符如果是“H”表示第i行第j列的硬币是正面向上,
否则是反面向上。第i行j列的左上方是指行不超过i并且列不超过j的区域。
1≤n;m≤100,1≤T≤50。

Output

对于每局游戏,输出一行。
如果dongdong 存在必胜策略则输出“- -”(不含 引号) 否则输出“= =”(不含引号)。
(注意输出的都是半角符号,即三个符号 ASCII 码分别为45,61,95)

Sample Input

32
3
HHH
HHH
2 3
HHH
TTH
2 1
T
H

Sample Output

= =
- -
- -

Solution

有一个叫$yyb$的神仙她说这个题打表就可以了,于是我就抄了个爽。

首先要知道翻硬币游戏的一个结论。

假设你操作的最右(下)方的硬币必须是正着的,那么局面的$SG$值为局面中每个正面朝上的棋子单一存在时的$SG$值的异或和。

单一存在时$SG$的异或和就可以打表搞了。规律是:(左上角为$(0,0)$)

如果$i=0$且$j=0$,$SG(i,j)=2^{i+j}$。

否则$SG(i,j)=lowbit(i+j+1)$。

可以发现虽然这个$SG$值太大,可他二进制下都只有一位啊,开个$vis$数组记一下就好了。

Code

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define N (509)
using namespace std; int T,n,m,flag,vis[N];
char s[N]; int lowbit(int x) {return x&(-x);} int SG(int i,int j)
{
if (i && j) return i+j;
return log2(lowbit(i+j+));
} int main()
{
scanf("%d",&T);
while (T--)
{
flag=;
memset(vis,,sizeof(vis));
scanf("%d%d",&n,&m);
for (int i=; i<n; ++i)
{
scanf("%s",s);
for (int j=; j<m; ++j)
if (s[j]=='T') vis[SG(i,j)]^=;
}
for (int i=; i<n+m-; ++i)
if (vis[i]) flag=;
if (flag) puts("-_-");
else puts("=_=");
}
}

BZOJ1434:[ZJOI2009]染色游戏(博弈论)的更多相关文章

  1. bzoj1434 [ZJOI2009]染色游戏

    Description 一共n × m 个硬币,摆成n × m 的长方形.dongdong 和xixi 玩一个游戏, 每次可以选择一个连通块,并把其中的硬币全部翻转,但是需要满足存在一个 硬币属于这个 ...

  2. [luogu2594 ZJOI2009]染色游戏(博弈论)

    传送门 Solution 对于硬币问题,结论是:当前局面的SG值等于所有背面朝上的单个硬币SG值的异或和 对于求单个背面朝上的硬币SG值...打表找规律吧 Code //By Menteur_Hxy ...

  3. 【BZOJ1434】[ZJOI2009]染色游戏(博弈论)

    [BZOJ1434][ZJOI2009]染色游戏(博弈论) 题面 BZOJ 洛谷 题解 翻硬币的游戏我似乎原来在博客里面提到过,对于这类问题,当前局面的\(SG\)函数就是所有反面朝上的硬币单一存在时 ...

  4. [ZJOI2009]染色游戏

    Description 一共n × m 个硬币,摆成n × m 的长方形.dongdong 和xixi 玩一个游戏, 每次可以选择一个连通块,并把其中的硬币全部翻转,但是需要满足存在一个 硬币属于这个 ...

  5. BZOJ 1434: [ZJOI2009]染色游戏

    一开始想这不$SG$裸题...然后发现100组数据...然后发现连通块是任意的求$SG$貌似要暴力枚举.... 然后想了一下1维,手动打表,每次就是队当前所有异或后缀和求$mex$,好像就是$lowb ...

  6. luogu2594 [ZJOI2009]染色游戏

    做法其他题解已经说得很清楚了,但似乎没有对于本题 SG 函数正确性的证明,我来口胡一下( 证明: 猜想: \[\operatorname{SG}(i,j)=\begin{cases}\operator ...

  7. BZOJ 1411&&Vijos 1544 : [ZJOI2009]硬币游戏【递推,快速幂】

    1411: [ZJOI2009]硬币游戏 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 897  Solved: 394[Submit][Status ...

  8. POJ.1067 取石子游戏 (博弈论 威佐夫博弈)

    POJ.1067 取石子游戏 (博弈论 威佐夫博弈) 题意分析 简单的威佐夫博弈 博弈论快速入门 代码总览 #include <cstdio> #include <cmath> ...

  9. HDU.2516 取石子游戏 (博弈论 斐波那契博弈)

    HDU.2516 取石子游戏 (博弈论 斐波那契博弈) 题意分析 简单的斐波那契博弈 博弈论快速入门 代码总览 #include <bits/stdc++.h> #define nmax ...

随机推荐

  1. Sql函数的三种写法

    以前复制的创建sql函数比较乱,现在将我自己项目中的三种sql函数做下对比,一目了然: (1)表值函数——方法一:直接创建临时表,并返回临时表.优点:函数体中间可以直接申明临时变量,并做各种逻辑处理, ...

  2. JAVA实现加入收藏和设为首页---网摘

    JS:加入收藏夹<script language="javascript">function bookmark(){window.external.AddFavorit ...

  3. dubbo直连代码示例

    我们都知道dubbo是个分布式的RPC工具,等以后有时间能力允许的话,会好好写下dubbo,当在测试环境我们联调或想指定机器执行之时,是不需要ZK这类调度工具的,当然dubbo也提供了配置的解决方案, ...

  4. sql or语法

    1.mysql中or语法的使用,在mysql语法中or使用注意点. 项目遇到坑,遍历发放奖励数据查询错误!!! $sql = 'SELECT * FROM `vvt_spread_doubleegg_ ...

  5. git push远程仓库时报错:fatal: remote origin already exists. (已解决)

    在做远程仓库调试阶段,突然发现修改后的项目无法push了: 如果输入$ git remote add origin git@github.com:djqiang(github帐号名)/gitdemo( ...

  6. exception processing, template error resolving template

    错误信息:Exception processing template “/view/df”: Error resolving template “/view/df”, template might n ...

  7. 爬虫必备—scrapy-redis(分布式爬虫)

    转载自:http://www.cnblogs.com/wupeiqi/articles/6912807.html scrapy-redis是一个基于redis的scrapy组件,通过它可以快速实现简单 ...

  8. Flutter学习之制作底部菜单导航

    简介 现在我们的 APP 上面都会在屏幕下方有一排的按钮,点击不同的按钮可以进入不同的界面.就是说在界面的底部会有一排的按钮导航.可看下面的图示. 完成图示 程序工程目录 梳理下实现步骤我们需要实现这 ...

  9. UBUNTU16.04 连接不了cn.archive.ubuntu.com

    ubuntu系统更换源 更换源的方法非常简单:修改/etc/apt/sources.list文件即可 进入目录 /etc/apt cd /etc/apt修改sources.list文件 sudo vi ...

  10. session 之session混乱解决方法(转)

    知道了session混乱产生的原因之后,也就知道了问题的根源.同时也引出了很多的问题: 1.如何记录住在线人员(这里只有帐号的系统用户,不包括访客): 2.如何限制同一个帐号在同一时间段内只能够登陆一 ...