思路:记输、平局、赢得状态分别为-1,0,1.

则有,

先手想要达到某种状态t,如果先手走一步棋子后对手无论怎么走都会达到状态1-t。

后手无论怎么走都会打到状态t,如果下一步无论怎么走先手都会达到状态1-t。

#include <cstdio>
#include <cstring>
using namespace std;int chess[6][6], token, row[2][4], coj[2][4], diag[2][2];// i,j 位置被id占据后更新状态
void update_state(int i, int j, int id, int add) {chess[i][j] = add==1? id:-1;row[id][i] += add;coj[id][j] += add;if (i == j) diag[id][0] += add;if (i + j == 3) diag[id][1] += add;token += add;
}int must_get(int t, int id);int calc_state(int i, int j, int id) {// id占据ij位置后的状态if (row[id][i] == 4 || coj[id][j] == 4 ||diag[id][0] == 4 || diag[id][1]== 4) return 1;// winif (token == 16) return 0;// tiereturn -2;// unkown state
}int can_get(int t, int id) {// id 能够是否到达状态tfor (int i = 0; i < 4; ++i) {for (int j = 0; j < 4; ++j) {if (chess[i][j] == -1) {update_state(i, j, id, 1);int stat = calc_state(i, j, id);// 返回ij位置被id占据后的状态if (stat == t) {update_state(i, j, id, -1); return 1;}if (stat == -2 && must_get(-t, 1 - id)) {update_state(i, j, id, -1);return 1;}update_state(i, j, id, -1);}}}return 0;
}
int must_get(int t, int id) {// 是否id无论怎么走都到达状态tfor (int i = 0; i < 4; ++i) {for (int j = 0; j < 4; ++j) {if (chess[i][j] == -1)     {update_state(i, j, id, 1);int stat = calc_state(i, j, id);if (stat >= 0 && stat != t) {update_state(i, j, id, -1);return 0;}else if (stat == -2 && !can_get(-t, 1 - id)){update_state(i, j, id, -1);return 0;}update_state(i, j, id, -1);}}}return 1;
}int main() {//freopen("in.txt", "r", stdin);int t, tar;char c, s[10];scanf("%d", &t);while (t--) {token = 0;memset(chess, -1, sizeof(chess));memset(row, 0, sizeof(row));memset(coj, 0, sizeof(coj));memset(diag, 0, sizeof(diag));scanf("%s%*[\n]", s);for (int i = 0; i < 4; ++i) {for (int j = 0; j < 4; ++j) {scanf("%c", &c);if (c == 'x') {// x is 0update_state(i, j, 0, 1);}else if (c == 'o') {// o is 1update_state(i, j, 1, 1);}}scanf("%*[\n]");}switch (s[0]) {case 'L': tar = -1; break;case 'W': tar = 1; break;default: tar = 0; break;}if (can_get(tar, token%2))// 先手的id:token%2printf("YES\n");else printf("NO\n");}
}

转载于:https://www.cnblogs.com/yyf2016/p/5734347.html

poj4051Chess:搜索相关推荐

  1. VS Code 配置调试参数、launch.json 配置文件属性、task.json 变量替换、自动保存并格式化、空格和制表符、函数调用关系、文件搜索和全局搜索、

    1. 生成配置参数 对于大多数的调试都需要在当前项目目录下创建一个 lanch.json 文件,位置是在当前项目目录下生成一个 .vscode 的隐藏文件夹,在里面放置一些配置内容,比如:settin ...

  2. 浅显易懂 Makefile 入门 (03)— 目标文件搜索(VPATH 和 vpath 的区别和使用)、隐含规则

    1. 目标文件搜索(VPATH和vpath) 如果需要的文件是存在于不同的路径下(即源文件与 Makefile 文件不在同一个路径下),在编译的时候就用到了 Makefile 中为我们提供的目录搜索文 ...

  3. Windows10自带搜索增强设置

    操作系统:Windows10 前言:Windows自带的搜索速度非常慢,因此有人借助Everything等索引软件进行搜索,能够显著提升搜索速度.但是Windows自带的搜索在进行一些设置以后也能达到 ...

  4. listary 指定目录搜索_everything

    20211009 https://zhuanlan.zhihu.com/p/225414423 listary详细使用 20210710 everything搜索文件,结果出现相同的2个重复情况,路径 ...

  5. LeetCode简单题之二叉搜索树中的搜索

    题目 给定二叉搜索树(BST)的根节点 root 和一个整数值 val. 你需要在 BST 中找到节点值等于 val 的节点. 返回以该节点为根的子树. 如果节点不存在,则返回 null . 示例 1 ...

  6. Hexo集成Algolia实现搜索功能

    2年前搭建的hexo博客好久没有维护了,一看 hexo 以及先前使用 butterfly 主题已经更新好几个版本了,看介绍在速度性能上有了很大的提高,于是打算给 hexo 升个级,整理整理翻翻新.通过 ...

  7. 目标识别的选择性搜索

    目标识别的选择性搜索 Selective Search for Object Recognition 论文地址: https://ivi.fnwi.uva.nl/isis/publications/b ...

  8. 2021年大数据ELK(四):Lucene的美文搜索案例

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 美文搜索案例 一.需求 二.准备工作 1.创建IDEA项目 2. ...

  9. [C] 深度优先搜索解决连通块/染色问题——求岛的个数

    本文介绍用DFS解决连通块个数问题 有关dfs的介绍见另外一篇:不撞南墙不回头--深度优先搜索 例题 宝岛探险 题目描述 一个小岛由一个主岛和一些复附属岛屿组成,该岛使用一个二维矩阵表示,其中数字表示 ...

最新文章

  1. SVM-支持向量机原理详解与实践之四
  2. 再见 2020!Apache RocketMQ 发布 4.8.0,DLedger 模式全面提升!
  3. 年轻人(以我为例)最应该做的事情(个人观点)
  4. (08)Vivado时钟约束
  5. wordpress 手动更新方法记录
  6. 六招制敌,搞定 core dump 问题
  7. [转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
  8. linux设置自动关机命令,Linux怎么用命令设置自动关机
  9. JVM内存模型和性能调优:JVM整体结构及内存模型- 第10篇
  10. 首个单季度盈利,ARPU增速却持续下滑,拼多多已埋下未来隐忧
  11. nabcd分析解谜类rpg游戏
  12. 数字图像处理 检测护照图像中的机器可读区域
  13. SSD接口类型小知识
  14. STM32F4开发板硬件平台简介
  15. 12306 抢票 python + selenium + chrome (二) 基础准备的软件和材料
  16. 【揭秘恒大老总许家印】迄今为止最深度、全面的。
  17. 微信支付 postman_小刘同学微信支付接入全笔记
  18. 博基计划(4)---近红外光谱过程分析中基线漂移的主要来源
  19. vector push_back()值传递到底啥意思?
  20. Tp5 前后端分离 模糊查询

热门文章

  1. 知方可补不足~SQL中的count命令的一些优化措施(百万以上数据明显)
  2. exchange 2010 sp2 证书问题
  3. 串口编程-读写超时 COMMTIMEOUTS设置
  4. Identity Mappings in Deep Residual Networks
  5. hookup_2.10-0.2.3.jar包下载
  6. 新的一年你该如何起飞
  7. Debian+Pure-ftpd+MySQL+User manager for PureFTPd
  8. 有SELinux引起的Apache基于端口的虚拟主机启动失败
  9. 再谈HTTP2性能提升之背后原理—HTTP2历史解剖
  10. springBoot 打war包 程序包com.sun.istack.internal不存在的问题