题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=32209

【思路】

博弈论。

根据X分布划分禁区,每个可以放置的块为单独一个游戏。按长度定义状态,构造sg函数。依次试验每一种放法。

【代码】

 #include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std; const int N = +; int g[N],n; int mex(vector<int>& s) {
if(s.empty()) return ;
sort(s.begin(),s.end());
if(s[]) return ;
for(int i=;i<s.size();i++)
if(s[i]>s[i-]+) return s[i-]+;
return s[s.size()-]+;
}
void get_g() {
g[]=; g[]=g[]=g[]=;
for(int i=;i<=N-;i++) {
vector<int> s;
s.push_back(g[i-]);
s.push_back(g[i-]);
if(i>=) s.push_back(g[i-]);
for(int j=;j<i-;j++)
s.push_back(g[j-] ^ g[i-j-]);
g[i]=mex(s);
}
} bool winning(char *s) {
int n=strlen(s);
for(int i=;i<n-;i++)
if(s[i]=='X' && s[i+]=='X' && s[i+]=='X') return false;
int no[N];
memset(no,,sizeof(no));
no[n]=;
for(int i=;i<n;i++) if(s[i]=='X') {
for(int d=-;d<=;d++)
if(i+d>= && i+d<n) {
if(d!= && s[i+d]=='X') return true;
no[i+d]=;
}
} int sg=;
int start=-;
for(int i=;i<=n;i++) {
if(start< && !no[i]) start=i;
if(no[i] && start>=) sg^=g[i-start];
if(no[i]) start=-;
}
return sg!=;
} int main() {
get_g();
int T; scanf("%d",&T);
while(T--) {
char s[N];
scanf("%s",s);
int n=strlen(s);
if(!winning(s)) puts("LOSING\n");
else {
puts("WINNING");
bool first=;
for(int i=;i<n;i++) if(s[i]=='.') {
s[i]='X';
if(!winning(s))
if(first) printf("%d",i+) , first=;
else printf(" %d",i+);
s[i]='.';
}
putchar('\n');
}
}
return ;
}

UVA 10561 Treblecross(博弈论)的更多相关文章

  1. UVA 10561 - Treblecross(博弈SG函数)

    UVA 10561 - Treblecross 题目链接 题意:给定一个串,上面有'X'和'.',能够在'.'的位置放X.谁先放出3个'X'就赢了,求先手必胜的策略 思路:SG函数,每一个串要是上面有 ...

  2. UVa 10561 - Treblecross

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

  3. UVa 10561 Treblecross (SG函数)

    题意:给定上一行字符串,其中只有 X 和 . 并且没有连续的三个 X,两个玩家要分别在 . 上放 X,如果出现三个连续的 X,则该玩家胜利,现在问你先手胜还是败,如果是胜则输出第一步可能的位置. 析: ...

  4. UVa 10561 (SG函数 递推) Treblecross

    如果已经有三个相邻的X,则先手已经输了. 如果有两个相邻的X或者两个X相隔一个.,那么先手一定胜. 除去上面两种情况,每个X周围两个格子不能再放X了,因为放完之后,对手下一轮再放一个就输了. 最后当“ ...

  5. Treblecross(uva 10561)

    题意:一个 1 × n 的棋盘,有 X 和 :,当棋盘上出现三个连续的X 时游戏结束,两人轮流操作,每次能把一个 : 变成 X,问先手必胜方案数以及先手可以放的位置. /* 对于先手,当有一个'X'时 ...

  6. uva 10561 sg定理

    Problem C Treblecross Input: Standard Input Output: Standard Output Time Limit: 4 Seconds Treblecros ...

  7. lightoj 1229 - Treblecross 博弈论

    思路:SG函数 枚举先手的每一个位置是否有必胜. 1)如果出现了XXX则必胜: 2)如果出现了XX或X.X则必败: 3)否则计算后手的sg值和. 代码如下: #include<iostream& ...

  8. .Uva&LA部分题目代码

    1.LA 5694 Adding New Machine 关键词:数据结构,线段树,扫描线(FIFO) #include <algorithm> #include <cstdio&g ...

  9. UVa 1378 A Funny Stone Game [博弈论 SG函数]

    A Funny Stone Game 题意: $n \le 23$堆石子,每次选择$i < j \le k$,从$i$拿走1颗$j,k$各放入一颗,不能取就失败.求先手是否必胜以及第一次取的策略 ...

随机推荐

  1. [Excel] C# ExcelHelper操作类 (转载)

    点击下载 ExcelHelper.rar 主要功能如下1.导出Excel文件,自动返回可下载的文件流 2.导出Excel文件,转换为可读模式3.导出Excel文件,并自定义文件名4.将数据导出至Exc ...

  2. [DEncrypt] MySecurity--安全加密/Base64/文件加密 (转载)

    点击下载 MySecurity.zip 这个类是关于加密,解密的操作,文件的一些高级操作1.MySecurity  加密字符串2.MySecurity  加密字符串 密钥为系统默认 012345678 ...

  3. getSharedPreferences()与getSharedPreferences()与getDefaultSharedPreferences()的区别

    http://blog.csdn.net/ah200614435/article/details/7869681 一直迷惑于这三个方法的关系,最近忙完项目,好好的分析一下. 如果你熟悉Context那 ...

  4. 对于百川SDK签名验证的问题

    SDK是要在wantu.taobao.com生成的.而生成这个SDK其实是要上传一个apk,而这个上传其实就是取他的签名而已.验证就是那张yw222那张图片.重点是你上传的apk的签名是不是跟你的生成 ...

  5. Android-The specified child already has a parent. You must call removeView() on the child's parent first.

    这个问题搞了我半天了,网上有很多人说需要找到该控件的parent后,让该parent 先remove需要添加的控件,然后在添加,如: if (view != null) { ViewGroup par ...

  6. sql sever怎样替换把表中数据。

    怎样替换把表中“舞台桁架厂”替换为“舞台桁架厂家” 表数据结构为: id                name                    key                addre ...

  7. 简单的背包变形HDU1203,HDU2955

    今天一直在写背包,不过中间停了一段时间在写shell. 一直在做01背包.今天做了这两题很相似的背包 首先是HDU1203 Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要 ...

  8. ARM开发板系统移植-----rootfs的制作

    前面两篇文章分别介绍了mini2440开发板上运行的bootloader和kernel,到这里系统启动后其实是停留在一个“僵死”的状态---无法挂载根文件系统. 这里将介绍如何制作一个根文件系统,并且 ...

  9. ART模式和Dalvik模式的异同

    Dalvik模式 如果要解释清楚什么是ART模式,我们就需要从Android系统的应用编译模式说起,我们都知道Android系统是以Linux系统为底层构建的,Android系统是开源(源代码公开)的 ...

  10. C语言-06数据类型-05 总结

    一.基本数据类型1.int1> long int.long:8个字节 %ld2> short int.short:2个字节 %d %i3> unsigned int.unsigned ...