Java方格染色_C++实现涂色游戏(博弈)
在一个2*N的格子上,Alice和Bob又开始了新游戏之旅。
这些格子中的一些已经被涂过色,Alice和Bob轮流在这些格子里进行涂色操作,使用两种涂色工具,第一种可以涂色任意一个格子,第二种可以涂色任意一个2*2的格子。每一轮游戏里,他们可以选择一种工具来涂色尚未被染色的格子。需要注意,涂色2*2的格子时,4个格子都应当未被涂色。最后一步涂满所有格子的玩家获胜。
一如既往,Alice先手,最优策略,谁是赢家?
Input输入第一行为T,表示有T组测试数据。
每组数据包含两个数字,N与M,M表示有多少个已被染色的格子。接下来的M行每行有两个数字Xi与Yi,表示已经被涂色的格子坐标。
[Technical Specification]
1. 1 <= T <= 74
2. 1 <= N <= 4747
3. 0 <= M <= 2 * N
4. 1 <= Xi <= 2, 1 <= Yi <= N,格子坐标不会重复出现
Output对每组数据,先输出为第几组数据,然后输出“Alice”或者“Bob”,表示这轮游戏的赢家。 Sample Input
2
2 0
2 2
1 1
2 2
Sample Output
Case 1: Alice
Case 2: Bob
思路:
可以先考虑有连续n列的空格的sg值是多少。
n=0时显然sg[0]=0,之后就是普通的sg函数打表,只不过是要将格子分区而已。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define INF 0x3f3f3f3f
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
const int maxn=5000;
int sg[maxn];
bool pl[2][maxn];
int get_sg(int x)
{
if(sg[x]!=-1)
return sg[x];
bool vis[maxn];
memset(vis, false , sizeof(vis));
for(int i=0; i<=x-1-i; i++)
{
int t=get_sg(i)^1^get_sg(x-1-i); //只涂这一列的其中一个格子
vis[t]=true;
}
for(int i=0; i<=x-2-i; i++)
{
int t=get_sg(i)^get_sg(x-i-2); //这一列的格子都涂
vis[t]=true;
}
for(int i=0; ; i++)
{
if(!vis[i])
{
sg[x]=i;
break;
}
}
return sg[x];
}
int main()
{
memset(sg, -1, sizeof(sg));
sg[0]=0;
for(int i=1; i
sg[i]=get_sg(i);
int t;
scanf("%d", &t);
for(int cas=1; cas<=t; cas++)
{
int n, m;
scanf("%d%d", &n, &m);
memset(pl, false, sizeof(pl));
int ans=0;
for(int i=1; i<=m; i++)
{
int x, y;
scanf("%d%d", &x, &y);
pl[--x][--y]=true;
}
int cnt=0;
for(int i=0; i
{
if(pl[0][i]&&pl[1][i]) //如果某一列的格子都涂了,那么异或这一列格子之前的连续空格子的sg值
{
ans^=sg[cnt];
cnt=0;
continue;
}
if(pl[0][i]^pl[1][i]) //如果这一列之涂了一个格子,那么异或这一列格子之前的连续空格子的sg值再异或1
{
ans=ans^sg[cnt]^1;
cnt=0;
continue;
}
cnt++; //如果这一列没有格子被涂,那么连续空格子的长度+1
}
ans^=sg[cnt];
if(ans)
printf("Case %d: Alice\n", cas);
else
printf("Case %d: Bob\n", cas);
}
return 0;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
Java方格染色_C++实现涂色游戏(博弈)相关推荐
- 【NOIP 模拟赛】平均数 涂色游戏 序列题解
吐槽(完跪):神tmNOIP模拟赛,看到大题头根本高级数据结构什么的想都没想,结果死的很惨,第三题竟然要可持久化线段树,这NOIP我服了. 平均数: 这道题40分相信大家都能拿到,剩下的60分讲真考验 ...
- qduoj LC的涂色游戏(快速幂)
题目链接:https://qduoj.com/problem/12/点击打开链接 LC的涂色游戏 发布时间: 2015年9月19日 21:42 时间限制: 1000ms 内存限制: 256M ...
- c语言写一个格子涂色的游戏,不一样的涂色游戏小程序,这个魔力贴贴涂色游戏有点意思...
原标题:不一样的涂色游戏小程序,这个魔力贴贴涂色游戏有点意思 30000+游戏爱好者已加入我们! 沐沐带你发现好游戏! <魔力贴贴>游戏小程序好玩吗? <魔力贴贴>小游戏怎么玩 ...
- NOI Online #2 提高组 第一题:涂色游戏
NOI Online #2 提高组 第一题:涂色游戏 前言 题目 解析 代码 前言 呦呵,这道题我竟然爆零了 而且我的暴力dfs死循环了!\bold{\Large\xcancel\text{而且我的暴 ...
- 【noip2016十连测round3】T3 涂色游戏 【矩阵快速幂优化dp】
涂色游戏 题解: 推一推公式. 我们让f[i][j]表示第i列有j种颜色的方案总数,k表示i-1列用了多少种颜色,l表示第i列用了多少种没有在i-1列出现的颜色,G(i,j)表示i个格子涂j种颜色的方 ...
- qduoj LC的涂色游戏
LC的涂色游戏 发布时间: 2015年9月19日 21:42 时间限制: 1000ms 内存限制: 256M 描述 LC是实验室传说级的大神,最近喜欢上了涂色游戏,现在纸上有n块空白区域,lc ...
- 涂色游戏color(【CCF】NOI Online 能力测试2 提高组第一题 )
子序列问题sequence([CCF]NOI Online能力测试2 提高组第二题 ) 游戏match([CCF]NOI Online能力测试2 提高组第三题 ) 题目背景 1s 256M 题目描述 ...
- hdu 4559 涂色游戏(SG)
在一个2*N的格子上,Alice和Bob又开始了新游戏之旅. 这些格子中的一些已经被涂过色,Alice和Bob轮流在这些格子里进行涂色操作,使用两种涂色工具,第一种可以涂色任意一个格子,第二种可以涂色 ...
- 橡皮擦的英语_从填字涂鸦到英语启蒙,家长口中的儿童版“秘密花园”涂色游戏测评【玩具测评】...
#前情提要#丰富的拓展玩法让简单的穿珠游戏大不同,点击<手眼协调与数学启蒙,用线绳穿珠游戏促进能力发展>了解详情. 今天我们为大家带来了一篇绘画+英语启蒙学习玩具的测评报告.这款玩具是植绒 ...
最新文章
- 使用Keras/TensorFlow模型构建属于你的Chatbot API
- Example of BeanFactoryAware in Spring--转
- Struts2返回JSON对象的方法总结
- 电脑cmd命令大全_电脑定时关机的方法(2)
- GitHub使用指南——如何删除存储库
- 奇偶链表的分割(C++)
- django 1.8 官方文档翻译: 3-6-2 内建的中间件
- 十荟团创始人发表内部信,公布下半场业务的全面升级规划
- 一次面试留下的实际应用问题。关于HttpModule,IIS集成模式。
- Linux中的sh+source+export
- Tomcat--安装与部署(一)
- centOS7查看防火墙状态
- 服务器采集协议,H3C设备服务器采集参数认证过程(包含redfish和restfull协议)
- 语音识别/合成开源项目
- Fiverr 攻略:跨境自由职业通过 Fiverr 盈利
- 如何优化在搜索引擎上的友好度
- python使用requests时报错requests.exceptions.SSLError: HTTPSConnectionPool
- 从懵懂娃娃到社会行业大佬,这中间经历的过程的概括性思考
- 创维,彩电业的“技术咖”,能否赢得下一个十年?
- ccf python写题随手记