[ZJOI2009]染色游戏
Description
Input
Output
Sample Input
3
HHH
HHH
2 3
HHH
TTH
2 1
T
H
Sample Output
- -
- -
HINT
对于40% 的数据,满足1 ≤ n;m ≤ 5。
对于100% 的数据,满足1 ≤ n;m ≤ 100,1 ≤ T ≤ 50。
先考虑一维
SG[i]为单独考虑只有i是反面,其他都是正面的SG值,这样原情况可以转化为很多子游戏
假设要求SG[3]
也就是001
有这么几种:000 010 110
SG[3]=mex{0,2,2^1}=1

SG(4) = mex{0, 1, 1 XOR 2, 1 XOR 2 XOR 1} = 4;

SG(5) = mex(0, 4, 4 XOR 1, 4 XOR 1 XOR 2, 4 XOR 1 XOR 2 XOR 1) = 1;
枚举了很多SG发现SG[n]=lowbit(n)
将类似的方法拓展到2维:
要求SG[2][2],也就是

归纳得出,在i,j都大于1时,SG[i][j]=2i+j-2
在i或j为0时,为一维的算法
优于2200过大,所以用二进制存储
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
struct Num
{
int a[];
}SG[][],ans;
int n,m,flag;
char s[];
Num operator ^(const Num &A,const Num &B)
{int i;
Num C;
memset(C.a,,sizeof(C.a));
for (i=;i<=;i++)
if (A.a[i]!=B.a[i]) C.a[i]=;
return C;
}
int lowbit(int x)
{
return x&(-x);
}
void getSG()
{int i,j;
SG[][].a[]=;
for (i=;i<=;i++)
{
int x=lowbit(i);
for (j=;j<=;j++)
if ((<<j)==x)
SG[][i].a[j]=SG[i][].a[j]=;
}
for (i=;i<=;i++)
{
for (j=;j<=;j++)
{
SG[i][j].a[i+j-]=;
}
}
}
int main()
{int T,i,j;
cin>>T;
getSG();
while (T--)
{
cin>>n>>m;
memset(ans.a,,sizeof(ans.a));
for (i=;i<=n;i++)
{
scanf("%s",s+);
for (j=;j<=m;j++)
{
if (s[j]=='T') ans=ans^SG[i][j];
}
}
flag=;
for (i=;i<=;i++)
if (ans.a[i])
{flag=;break;}
if (flag) printf("-_-\n");
else printf("=_=\n");
}
}
[ZJOI2009]染色游戏的更多相关文章
- 【BZOJ1434】[ZJOI2009]染色游戏(博弈论)
[BZOJ1434][ZJOI2009]染色游戏(博弈论) 题面 BZOJ 洛谷 题解 翻硬币的游戏我似乎原来在博客里面提到过,对于这类问题,当前局面的\(SG\)函数就是所有反面朝上的硬币单一存在时 ...
- BZOJ1434:[ZJOI2009]染色游戏(博弈论)
Description 一共n×m个硬币,摆成n×m的长方形.dongdong和xixi玩一个游戏,每次可以选择一个连通块,并把其中的硬币全部翻转,但是需要满足存在一个硬币属于这个连通块并且所有其他硬 ...
- bzoj1434 [ZJOI2009]染色游戏
Description 一共n × m 个硬币,摆成n × m 的长方形.dongdong 和xixi 玩一个游戏, 每次可以选择一个连通块,并把其中的硬币全部翻转,但是需要满足存在一个 硬币属于这个 ...
- BZOJ 1434: [ZJOI2009]染色游戏
一开始想这不$SG$裸题...然后发现100组数据...然后发现连通块是任意的求$SG$貌似要暴力枚举.... 然后想了一下1维,手动打表,每次就是队当前所有异或后缀和求$mex$,好像就是$lowb ...
- [luogu2594 ZJOI2009]染色游戏(博弈论)
传送门 Solution 对于硬币问题,结论是:当前局面的SG值等于所有背面朝上的单个硬币SG值的异或和 对于求单个背面朝上的硬币SG值...打表找规律吧 Code //By Menteur_Hxy ...
- luogu2594 [ZJOI2009]染色游戏
做法其他题解已经说得很清楚了,但似乎没有对于本题 SG 函数正确性的证明,我来口胡一下( 证明: 猜想: \[\operatorname{SG}(i,j)=\begin{cases}\operator ...
- BZOJ 1411&&Vijos 1544 : [ZJOI2009]硬币游戏【递推,快速幂】
1411: [ZJOI2009]硬币游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 897 Solved: 394[Submit][Status ...
- bzoj1411: [ZJOI2009]硬币游戏
1411: [ZJOI2009]硬币游戏 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 965 Solved: 420[Submit][Status ...
- 题解 [SDOI2009]E&D/染色游戏/Moving Pebbles
E&D 染色游戏 Moving Pebbles E&D 题目大意 给出 \(2n\) 堆石子,\(2i-1\) 和 \(2i\) 为一组.每次可以选择一组删掉其中一堆,然后从同一组另外 ...
随机推荐
- JavaScript(第十八天)【DOM基础】
学习要点: 1.DOM介绍 2.查找元素 3.DOM节点 4.节点操作 DOM(Document Object Model)即文档对象模型,针对HTML和XML文档的API(应用程序接口).DOM描绘 ...
- Access数据库跨库查询及记录集区分
医疗设备软件一般都是单机软件,如果是Windows平台,常会选择Access数据库存储结构化数据,因为他轻量,便于部署.然而随着医疗信息化的发展,医生希望对多台单机设备的数据进行管理,采用网络数据库当 ...
- beta冲刺总结附(分工)-咸鱼
冲刺链接 分工细则: 分配比例:前端:后台数据库+代码:服务器配置:测试=3:3:2:2 工作量权重比: 前端 后台 服务器 测试 翁陈华 0.9 0.1 0 0 黄紫仪 0.1 0.8 0 0 ...
- 敏捷开发每日报告--day4
1 团队介绍 团队组成: PM:齐爽爽(258) 小组成员:马帅(248),何健(267),蔡凯峰(285) Git链接:https://github.com/WHUSE2017/C-team 2 ...
- python的项目结构
项目结构 知识点 创建项目,编写 __init__ 文件 使用 setuptools 模块,编写 setup.py 和 MANIFEST.in 文件 创建源文件的发布版本 项目注册&上传到 P ...
- css的内容
块级元素和行内元素的区别: 1. 行内元素部不能够设置宽度和高度.行内元素的宽度和高度是标签内容的宽度和高度.块级元素可以设置宽度和高度. 2. 块级元素会独占一行.而行内元素却部能够独占一行,只能和 ...
- 【非官方】Surging 微服务框架使用入门
前言 本文非 Surging 官方教程,只是自己学习的总结.如有哪里不对,还望指正. 我对 surging 的看法 我目前所在的公司采用架构就是类似与Surging的RPC框架,在.NET 4.0框架 ...
- Python基础学习篇章二
一. Python如何运行程序 1. 在交互模式下编写代码 最简单的运行Python程序的方法是在Python交互命令行中输入程序.当然有很多方法可以开始这样的命令行,比如IDE,系统终端.如果你已经 ...
- ESP8266 wifi 模块配置,Wechat+APP控制实现
首先刷入安信可的AiCloud 2.0 SDK文件,AiCloud 2.0具体信息参见AiCloud 1.0 和AiCloud 2.0对比 APP见如下二维码下载. 1.安信可AiCloud 2.0 ...
- JavaScript 动态显示当前时间
代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <tit ...