【P2361】yyy棋(博弈论+贪心+模拟)
2024-09-04 09:56:26
这个题看上去本来不好处理,然而善意的题面已经基本告诉你做法了,小时候玩的那个游戏就是代码的核心。动动脑子想想,如果长和宽的积是奇数,那么一定要先手,如果是偶数,那么后手就会获胜。
好了,那么怎么处理对称情况呢,随便画一个小棋盘试一试,很容易得出是x-i+1和m-y+1。这之后就是颜色的问题了,因为题目有颜色的限制和对方耍赖这一操作,所以我们每一次放棋子的颜色也有要求。
再画一个小棋盘模拟一下,容易得出是偶数时要放不一样的,奇数时放一样的。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#define re register
#define wc 0.0000000001
using namespace std;
int n,m,map[][],t,x,a[],y,c,cc;
int main()
{
cin>>n>>m;
memset(map,,sizeof(map));
if(n*m%==)
{
cout<<"First"<<endl<<n/+<<" "<<m/+<<" "<<<<endl;
map[n/+][m/+]=;
while(cin>>x>>y>>c)
{
if(c==)
cc=-;
else
cc=;
if(x+<=n&&map[x+][y]==cc||x->&&map[x-][y]==cc||y+<=m&&map[x][y+]==cc||y->&&map[x][y-]==cc)
{
cout<<"Buwanle";
return ;
}
map[x][y]=cc;
cout<<n-x+<<" "<<m-y+<<" "<<c<<endl;
map[n-x+][m-y+]=cc;
}
}else
{
cout<<"Second"<<endl;
while(cin>>x>>y>>c)
{
if(c==)
cc=-;
else
cc=;
if(x+<=n&&map[x+][y]==cc||x->&&map[x-][y]==cc||y+<=m&&map[x][y+]==cc||y->&&map[x][y-]==cc)
{
cout<<"Buwanle";
return ;
}
map[x][y]=cc;
cout<<n-x+<<" "<<m-y+<<" "<<(c^)<<endl;
map[n-x+][m-y+]=cc*(-);
}
}
}
最新文章
- Java基础知识总结
- Quartus II 增量编译
- centos如何卸载软件
- UITableView相关知识点
- hihoCoder 1305 区间求差
- python练习程序(c100经典例15)
- SQL Server 2005/2008 触发器的管理和查看
- 获取某个文件夹中所有txt文件
- Android Volley 之自定义Request
- 链接文本在a标签内标签里也可以用driver.find_element_by_link_text
- TGI
- Openlayers系列(一)关于地图投影相关错误的解决方案
- 记录Nginx实现内容重定向的两种方式:rewrite和反向代理
- YARN调试过程中的常见问题
- Firefox下载附件乱码的解决办法
- md5Util
- 利用Qt Designer 进行 空间提升propomotion 的时候异常: NO such file or directory
- spring 、spring boot 常用注解
- koa/redux middleware 深入解析
- CentOS6.5安装Tomcat8.0
热门文章
- 性能百万/s:腾讯轻量级全局流控方案详解【转自Wetest】
- FileToolkit 文件工具箱
- ";无法加载 DLL“oramts.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。"; —— 的解决方法
- MVC架构模式概述
- dfs-求连通块
- SVN中分支的建立与合并
- offset,scroll,client系列
- 印象笔记windows端-快捷键大全
- LeetCode-11-6
- C#数组实践