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

/*
对于先手,当有一个'X'时,它周围的两个格子就都不能放'X'了,所以这样游戏就被分成了几个部分,据此设定SG函数。
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#define N 210
using namespace std;
int SG[N],len,v[N];
char s[N],tmp[N];
int calc(int x){
if(x<) return ;
if(SG[x]!=-) return SG[x];
int vis[N];
memset(vis,,sizeof(vis));
for(int i=;i<=x;i++)
vis[calc(i-)^calc(x-i-)]=;
for(int i=;;i++)
if(!vis[i])
return SG[x]=i;
}
bool judge(int pos){
if(s[pos]=='X') return false;
for(int i=;i<len;i++) tmp[i]=s[i];
tmp[pos]='X';
for(int i=;i+<len;i++)//不知道为什么写i<len就不对,明明数组没有越界啊,奇了怪了。。。
if(tmp[i]=='X'&&tmp[i+]=='X'&&tmp[i+]=='X') return true;
for(int i=;i+<len;i++)
if(tmp[i]=='X'&&tmp[i+]=='X') return false;
for(int i=;i+<len;i++)
if(tmp[i]=='X'&&tmp[i+]=='X') return false;
int ans=,flag=,w=,last=-;
for(int i=len-;i>=;i--)
if(tmp[i]=='X'){
last=i;break;
}
for(int i=,j;i<len;i++){
if(i>last) w=;
if(tmp[i]=='X'){
flag=;continue;
}
for(j=i;j<len&&tmp[j]=='.';j++);
ans^=calc(j-i-w-flag);
i=j-;
}
return ans==;
}
int main(){
memset(SG,-,sizeof(SG));
int T;scanf("%d",&T);
while(T--){
int tot=;
scanf("%s",s);len=strlen(s);
for(int i=;i<len;i++)
if(judge(i))
v[++tot]=i;
if(tot){
printf("WINNING\n");
for(int i=;i<tot;i++)
printf("%d ",v[i]+);
printf("%d\n",v[tot]+);
}
else printf("LOSING\n\n");
}
return ;
}

Treblecross(uva 10561)的更多相关文章

  1. 并查集(UVA 1106)

    POINT: 把每个元素看成顶点,则一个简单化合物就是一条无向边,若存在环(即k对组合中有k种元素),则危险,不应该装箱,反之,装箱: 用一个并查集维护连通分量集合,每次得到一种化合物(x, y)时检 ...

  2. 【UVA10561】Treblecross(SG函数)

    题意:有n个格子排成一行,其中一些格子里面有字符X.两个游戏者轮流操作,每次可以选一个空格,在里面放上字符X. 如果此时有3个连续的X出现,则该游戏者赢得比赛.初始条件下不会有3个X连续出现. 判断先 ...

  3. L-Gap Substrings(uva 10829)

    题意:有一种形如uvu形式的字符串,其中u是非空字符串,且V的长度正好为L,那么称这个字符串为L-Gap字符串 给出一个字符串S,以及一个正整数L,问S中有多少个L-Gap子串. /* 这道题用到一个 ...

  4. Minimum Sum LCM(uva 10791)

    题意(就是因为读错题意而wa了一次):给一个数字n,范围在[1,2^23-1],这个n是一系列数字的最小公倍数,这一系列数字的个数至少为2 例如12,是1和12的最小公倍数,是3和4的最小公倍数,是1 ...

  5. Killer Problem (UVA 11898 )

    Problem You are given an array of N integers and Q queries. Each query is a closed interval [l, r]. ...

  6. POJ 2250 Compromise (UVA 531)

    LCS问题.基金会DP. 我很伤心WA非常多.就在LCS问题,需要记录什么路. 反正自己的纪录path错误,最后,就容易上当. 没有优化,二维阵列,递归打印,cin.eof() 来识别 end of ...

  7. uva 1639--精度处理方法之取对数(uva 1639)

    1639 - Candy Time limit: 3.000 seconds 1639 CandyLazyChild is a lazy child who likes candy very much ...

  8. 逆向+两次bfs(UVA 1599)

    为什么都说简单好想咧.坦白从宽看了人家的代码,涨了好多姿势,, http://blog.csdn.net/u013382399/article/details/38227917 被一个细节坑了.. 2 ...

  9. (UVA 11624)Fire!

    题目链接 http://vjudge.net/contest/121377#problem/J Joe works in a maze. Unfortunately, portions of the ...

随机推荐

  1. Java 批量文件压缩导出,并下载到本地

    主要用的是org.apache.tools.zip.ZipOutputStream  这个zip流,这里以Execl为例子. 思路首先把zip流写入到http响应输出流中,再把excel的流写入zip ...

  2. 关于union的一些问题

    创建一个测试数据表 CREATE TABLE `temp_table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT ...

  3. Docker学习笔记--2 镜像的创建

    如果我们需要在Docker环境下部署tomcat.redis.mysql.nginx.php等应用服务环境,有下面三种方法: 1,根据系统镜像创建Docker容器,这时容器就相当于是一个虚拟机,进入容 ...

  4. http 实战练习

    http 实战练习 建立httpd服务器,要求提供两个基于名称的虚拟主机: (1)www.X.com,页面文件目录为/web/vhosts/x:错误日志为/var/log/httpd/x.err,访问 ...

  5. 四、MySQL 连接

    MySQL 连接 使用mysql二进制方式连接 您可以使用MySQL二进制方式进入到mysql命令提示符下来连接MySQL数据库. 实例 以下是从命令行中连接mysql服务器的简单实例: [root@ ...

  6. nginx负载均衡集群(二)

    nginx负载均衡配置实战 一.配置基于域名虚拟主机的web节点 web02和web01做同样的操作,nginx配置文件如下: [root@web01 conf]# cat nginx.conf wo ...

  7. JZOJ 100029. 【NOIP2017提高A组模拟7.8】陪审团

    100029. [NOIP2017提高A组模拟7.8]陪审团 Time Limits: 1000 ms  Memory Limits: 131072 KB  Detailed Limits   Got ...

  8. Codeforces Round #462 (Div. 2) C. A Twisty Movement

    C. A Twisty Movement time limit per test1 second memory limit per test256 megabytes Problem Descript ...

  9. [BZOJ1588]营业额统计(Splay)

    Description 题意:给定 n个数,每给定一个数,在之前的数里找一个与当前数相差最小的数,求相差之和(第一个数为它本身) 如:5 1 2 5 4 6 Ans=5+|1-5|+|2-1|+|5- ...

  10. 字符编码,ASCII、Unicode与UTF-8的理解

    首先我们先要明白的两点是:1.计算机中的信息都是由二进制的0和1储存的:2.我们再计算机屏幕上看到的各种字符都是计算机系统按照一定的规则将二进制数字转换而来的. 一.基本概念. 1.字符集(chars ...