思路:SG函数

枚举先手的每一个位置是否有必胜。

1)如果出现了XXX则必胜;

2)如果出现了XX或X.X则必败;

3)否则计算后手的sg值和。

代码如下:

 #include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#define M 201
using namespace std;
char str[M];
int sg[M],len;
vector<int>p;
int get_sg(int m) //计算SG值
{
if(m<) return ;
if(sg[m]!=-) return sg[m];
bool vis[]={};
for(int i=;i<=m;i++)
vis[get_sg(i-)^get_sg(m-i-)]=;
int i=;
while(vis[i]) i++;
return sg[m]=i;
}
bool cal(int m)
{
char s[M];
strcpy(s,str);
if(s[m]=='X') return ;
s[m]='X';
for(int i=;i+<len;i++) //出现XXX
if(s[i]=='X'&&s[i+]=='X'&&s[i+]=='X') return ;
for(int i=;i+<len;i++) //出现XX
if(s[i]=='X'&&s[i+]=='X') return ;
for(int i=;i+<len;i++) //出现X.X
if(s[i]=='X'&&s[i+]=='X') return ;
int i,j,ans=;
bool f=;
for(i=,j=-;i<len;i++){ //计算后手的SG值和
if(s[i]=='X'){
if(f) ans^=get_sg(i-j-); //当两边都出现的X时要减去4
else{
ans^=get_sg(i-j-); //当只有一边出现X时要减去2
f=;
}
j=i;
}
}
ans^=get_sg(len-j-);
return ans==;
}
int main()
{
int t,ca=;
memset(sg,-,sizeof(sg));
scanf("%d",&t);
while(t--){
scanf("%s",&str);
len=strlen(str);
p.clear();
for(int i=;i<len;i++)
if(cal(i)) p.push_back(i+);
printf("Case %d:",++ca);
if(p.size()){
for(int i=;i<p.size();i++)
printf(" %d",p[i]);
puts("");
}
else printf(" 0\n");
}
return ;
}

最新文章

  1. AS与.net的交互——加载web上的xml
  2. jquery.cookie使用方法
  3. 如何开启多用户同时远程连接(Windows2008 Windows2012)
  4. HttpWebRequest提高效率之连接数,代理,自动跳转,gzip请求等设置问题
  5. CentOS 6.7 final编译安装Python 2.7.11
  6. [译]36 Days of Web Testing(四)
  7. 自学Python的点滴
  8. java Map 之 排序(key,value)
  9. Javascript编码规范,好的代码从书写规范开始,增强代码的可读性,可维护性,这是相当重要的!
  10. python 多进程间交换信息与共享信息
  11. Hibernate框架学习之注解映射实体类
  12. 50个PHP程序性能优化的方法
  13. impala集成sentry
  14. ASP.NET CSS 小结
  15. VSCode瞎折腾记
  16. 最简单打开三星note8三星galaxy susb调试模式的方法
  17. wxpython多线程通信的应用-实现边录音边绘制音谱图
  18. Linux下安装、启动、停止mongodb
  19. 【Spring】12、Spring Security 四种使用方式
  20. XSS(跨站脚本攻击)漏洞解决方案

热门文章

  1. 关于Linux下s、t、i、a权限
  2. SQL语句语法简介
  3. 网站服务器压力Web性能测试(1):Apache Bench:Apache自带服务器压力测试工具
  4. HTML5API(3)
  5. [New learn]@class和#import的区别使用
  6. C++——初识C++
  7. 分割线用CSS样式做出来的效果
  8. django开发项目实例3--用session是实现简单的登陆、验证登陆和注销功能
  9. hdu 1080(LCS变形)
  10. hdu 1041(递推,大数)