uva-10561-nim
题意: 给出一个连续的棋盘,有的位置为'.',有的位置为'X',二者轮流下子,当有一方获得连续三个子的时候取胜。
对于胜态,一种情况是当前局面出现"XX"/"X.X", 这样直接下一个子就获胜了。
会发现,对于".......X......."这种情况,先手绝对不能在这个X的相邻两格子里落子,否则就会形成上述的胜态给对手。
在排除了这种情况之后,我们可以把棋盘先预处理掉"禁区"部分之后再分解为一块块连续的子棋盘,这些 子棋盘相当于一个个的子问题。另一种胜态的情况就是在某一个'.'处落子之后剩余棋盘的sg值,sg[S']==0而且没有呈现出胜态1的局面,那就说明对手必败。
初始化sg[0]=0,sg[1]=sg[2]=sg[3]=1; 显然1、2、3时候无论落子到哪,剩下的位置都不能再放子了,也就是必败态(零态).
#include<bits/stdc++.h>
using namespace std;
int n,sg[];
char s[];
bool v[],idx[];
bool ok(){
for(int i=;i<=n-;++i)
if(s[i]=='X'&&s[i+]=='X'&&s[i+]=='X') return ;
return ;
}
bool _ok(){
for(int i=;i<n;++i){
if(s[i]=='.'){
s[i]='X';
if(ok()) {
s[i]='.';
return ;
}
s[i]='.';
}
}
int ans=,tmp=;
for(int i=;i<n;++i){
if(s[i]=='X'||
(i->=&&s[i-]=='X')||
(i->=&&s[i-]=='X')||
(i+<n&&s[i+]=='X')||
(i+<n&&s[i+]=='X')){
ans^=sg[tmp];
tmp=;
}
else
tmp++;
}
//cout<<"tmp="<<tmp<<endl;
ans^=sg[tmp];
return ans==;
}
int main(){
int i,j,k,t,m;
sg[]=sg[]=sg[]=;
for(i=;i<=;++i){
memset(v,,sizeof(v));
for(j=;j<=i;++j){
v[sg[max(,j-)]^sg[max(,i-j-)]]=;
}
for(j=;;j++){
if(!v[j]){
sg[i]=j;
break;
}
}
}
cin>>t;
while(t--){
cin>>s;
n=strlen(s);
memset(idx,,sizeof(idx));
for(i=;i<n;++i){
if(s[i]=='.'){
s[i]='X';
if(ok() || _ok()) idx[i]=;
s[i]='.';
}
}
bool can=;
for(i=;i<n;++i) if(idx[i]) can=;
if(!can) puts("LOSING\n");
else{
puts("WINNING");
for(i=;i<n;++i)
if(idx[i]){
cout<<i+;
break;
}
for(i++;i<n;++i)
if(idx[i]){
cout<<" "<<i+;
}
cout<<endl;
}
}
return ;
}
/*
5
.X....XX.. .... ..XX.. ..... ..X.X.. ... ..XX.. ................ ..XX.. ... ..X.. ..... ..X
*/
/*
4
.....
X.....X..X.............X....X..X
.X.X...X
...............................................
*/
uva-10561-nim的更多相关文章
- UVA 10561 - Treblecross(博弈SG函数)
UVA 10561 - Treblecross 题目链接 题意:给定一个串,上面有'X'和'.',能够在'.'的位置放X.谁先放出3个'X'就赢了,求先手必胜的策略 思路:SG函数,每一个串要是上面有 ...
- UVa 10561 - Treblecross
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...
- UVa 11859 (Nim) Division Game
把每一行m个数所有的素因子看做一堆,就把问题转化为n堆的Nim游戏. 然后预处理一下10000以内每个数素因数的个数,再根据书上的Bouton定理,计算一下n行素因数个数的异或和. 为0是先手必败局面 ...
- UVa 10561 (SG函数 递推) Treblecross
如果已经有三个相邻的X,则先手已经输了. 如果有两个相邻的X或者两个X相隔一个.,那么先手一定胜. 除去上面两种情况,每个X周围两个格子不能再放X了,因为放完之后,对手下一轮再放一个就输了. 最后当“ ...
- UVA 10561 Treblecross(博弈论)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=32209 [思路] 博弈论. 根据X分布划分禁区,每个可以放置的块为 ...
- UVa 10561 Treblecross (SG函数)
题意:给定上一行字符串,其中只有 X 和 . 并且没有连续的三个 X,两个玩家要分别在 . 上放 X,如果出现三个连续的 X,则该玩家胜利,现在问你先手胜还是败,如果是胜则输出第一步可能的位置. 析: ...
- Treblecross(uva 10561)
题意:一个 1 × n 的棋盘,有 X 和 :,当棋盘上出现三个连续的X 时游戏结束,两人轮流操作,每次能把一个 : 变成 X,问先手必胜方案数以及先手可以放的位置. /* 对于先手,当有一个'X'时 ...
- uva 10561 sg定理
Problem C Treblecross Input: Standard Input Output: Standard Output Time Limit: 4 Seconds Treblecros ...
- Division Game UVA - 11859 Nim
Code: #include<cstdio> #include<algorithm> using namespace std; #define maxn 10005 int n ...
- .Uva&LA部分题目代码
1.LA 5694 Adding New Machine 关键词:数据结构,线段树,扫描线(FIFO) #include <algorithm> #include <cstdio&g ...
随机推荐
- 处理内容有&特殊字符thinkphp返回xml无法解析的问题<![CDATA[xxx]]>
处理内容有&特殊字符thinkphp返回xml无法解析的问题<![CDATA[xxx]]> // xml 转义特殊字符 如&'" <![CDATA[&quo ...
- tomcat 9.0.4 性能调优
参考了网上的一些优化参数,但是在启动中发现 有2个报错: 11-Feb-2018 15:57:23.293 警告 [main] org.apache.catalina.startup.SetAllPr ...
- 上周日选拔题部分write up
---恢复内容开始--- 第一题.平淡无奇的签到题,“百度一下,你就知道”,打开之后会弹出一个百度的网页页面.网页题第一步,先查看它的源代码.从上往下看,发现了这样一行字 看起来有点像base编码,于 ...
- Problem F: 等式
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 104 Solved: 22[Submit][Status][Web Board] Descriptio ...
- Win7系统中如何查看当前文件被哪一个程序占用了
https://superuser.com/questions/117902/find-out-which-process-is-locking-a-file-or-folder-in-windows ...
- 【入门详解】MyBatis入门基础详解
什么是mybatis? MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索.MyBatis使用简单的XM ...
- 【第十四章】 springboot + profile(不同环境读取不同配置)
具体做法: 不同环境的配置设置一个配置文件,例如:dev环境下的配置配置在application-dev.properties中:prod环境下的配置配置在application-prod.prope ...
- Linux 安装 mysql 转 http://www.cnblogs.com/fnlingnzb-learner/p/5830622.html
到mysql官网下载mysql编译好的二进制安装包,在下载页面Select Platform:选项选择linux-generic,然后把页面拉到底部,64位系统下载Linux - Generic (g ...
- Python 实现协程
协程的概念 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程.(其实并没有说明白~) 我觉得单说协程,比较抽象,如果对线程有一定了解的话,应该就比较 ...
- An error occurred during installation: No such plugin: cloudbees-folder
解决办法:下载cloudbees-folder.hpi放在目录/usr/local/tomcat/webapps/jenkins/WEB-INF/detached-plugins/下,重启tomcat ...