Tic-Tac-Toe(三子连)(总结规律)

2023-11-20

Time Limit: 1000 mSec    Memory Limit : 262144 KB

Problem Description

Kim likes to play Tic-Tac-Toe.

Given a current state, and now Kim is going to take his next move. Please tell Kim if he can win the game in next 2 moves if both player are clever enough.

Here “next 2 moves” means Kim’s 2 move. (Kim move,opponent move, Kim move, stop).

Game rules:

Tic-tac-toe (also known as noughts and crosses or Xs and Os) is a paper-and-pencil game for two players, X and O, who take turns marking the spaces in a 3×3 grid. The player who succeeds in placing three of their marks in a horizontal, vertical, or diagonal row wins the game.

Input

First line contains an integer T (1 ≤ T ≤ 10), represents there are T test cases.

For each test case: Each test case contains three lines, each line three string(“o” or “x” or “.”)(All lower case letters.)

x means here is a x

o means here is a o

. means here is a blank place.

Next line a string (“o” or “x”) means Kim is (“o” or “x”) and he is going to take his next move.

Output

For each test case:

If Kim can win in 2 steps, output “Kim win!”

Otherwise output “Cannot win!”

Sample Input

3
. . .
. . .
. . .
o
o x o
o . x
x x o
x
o x .
. o .
. . x
o

Sample Output

Cannot win!
Kim win!
Kim win! 
题目:三子连的规则,然后给出残局,
1.kim可以先下一步,判断是否赢,
2.kim下一步,然后对手下一步,kim再下一步 判断是否赢。

刚开始的时候想用DFS因为最近搜索做的多了,然后样例过,WA了3发,发现我只是想当然的算法,然后想到可以分为2种情况 
1.下一步直接获胜
2.”套路“  
*     *     * 
*     *     *
*     *     * 
kim抢了四个角中的一个或者以上+中间的点,然后其余3个角的点再有2个即可套路对方用2步获胜
否则无法判断
#include <iostream>
#include <cstdio>     
using namespace std;  
char s[10],juzi[10],ch,ck,m1;        
int judge1()
{
    if(s[0]==ch&&s[1]==ch&&s[2]==ch) return 1;
    if(s[3]==ch&&s[4]==ch&&s[5]==ch) return 1;
    if(s[6]==ch&&s[7]==ch&&s[8]==ch) return 1;
    if(s[0]==ch&&s[3]==ch&&s[6]==ch) return 1;
    if(s[1]==ch&&s[4]==ch&&s[7]==ch) return 1;
    if(s[2]==ch&&s[5]==ch&&s[8]==ch) return 1;
    if(s[0]==ch&&s[4]==ch&&s[8]==ch) return 1;
    if(s[2]==ch&&s[4]==ch&&s[6]==ch) return 1;
    return 0;
}
int judge2()
{   /*0 1 2*/
    /*3 4 5*/
    /*6 7 8*/
    if(s[0]==ch&&s[4]==ch)
    {
        int num=0;
       if(s[2]!=ck)
            num++;
       if(s[6]!=ck)
            num++;
       if(s[8]!=ck)
            num++;
       if(num>1)
        return 1;
    } if(s[6]==ch&&s[4]==ch)
    {
        int num=0;
       if(s[0]!=ck)
            num++;
       if(s[2]!=ck)
            num++;
       if(s[8]!=ck)
            num++;
       if(num>1)
        return 1;
    }
    if(s[2]==ch&&s[4]==ch)
    {
        int num=0;
       if(s[0]!=ck)
            num++;
       if(s[6]!=ck)
            num++;
       if(s[8]!=ck)
            num++;
       if(num>1)
        return 1;
    }
     if(s[4]==ch&&s[8]==ch)
    {
        int num=0;
       if(s[0]!=ck)
            num++;
       if(s[6]!=ck)
            num++;
       if(s[2]!=ck)
            num++;
       if(num>1)
        return 1;
    }
    return 0;

}
int main()
{
   int icase;
   scanf("%d",&icase);
   while(icase--)
   {
       getchar();
       int pos[10],cnt=1,ans=0;
       for(int i=1;i<=9;i++)
       {
          char a;
          scanf("%c",&a);
          getchar();
          s[ans++]=a;
       }
       //¶ÁÈë×Ö·û

      // printf("%s\n",s);

        scanf("%c",&ch);
       if(ch=='x') ck='o';
            else   ck='x';
      for(int i=0;i<9;i++){
          if(s[i]=='.')
          {
              pos[cnt++]=i;
             // printf("%d\n",cnt);
          }

      }  //ÕÒ³ö¿ÕÏÐλÖÃ
      int flag=0;
      for(int i=1;i<cnt;i++)
      {
          m1=s[pos[i]];
          s[pos[i]]=ch;
          if(judge1())
          {
             flag=1;
             break;
          }
          s[pos[i]]=m1; //¸´Ô­
      }
      if(flag)
        printf("Kim win!\n");
      else
       {   if(judge2())
           printf("Kim win!\n");
           else
           printf("Cannot win!\n");

       }

   }
}
这个题目属于数学逻辑推理部分的,是我的弱项,刚看上很是蒙蔽,而且之前有一道三子连的原题在湖科大OJ上没有看过,所以很是紧张,幸好最后AC了。

仍可做的题目:Problem K Wand   Problem G  YYS
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Tic-Tac-Toe(三子连)(总结规律) 的相关文章

  • java 对象序列化磁盘_java对象的序列化以及反序列化详解

    一 概念 序列化 把创建出来的对象 new出来的对象 以及对象中的成员变量的数据转化为字节数据 写到流中 然后存储到硬盘的文件中 反序列化 可以把序列化后的对象 硬盘上的文件中的对象数据 读取到内存中 然后就可以直接使用对象 这样做的好处是
  • Could not resolve dependencies for project

    ERROR Failed to execute goal on project open common Could not resolve dependencies for project com wt open open common j
  • JavaBean的Scope属性

    Scope 属性代表了Javabean对象的生存时间 可以是page request session和application中的一个 它们分别代表了JavaBean的四种不同生命周期和四种不同的使用范围 page的生命周期和作用范围是4种类
  • 【大学生软件测试基础】白盒测试 - 控制流图 - 01

    任务1 画出程序流程图 任务2 画出控制流图 任务3 根据程序环形复杂度的计算公式 求出程序路径集合中的独立路径数目 任务4 根据环形复杂度的计算结果 源程序的基本路径集合中有多少条独立路径 任务5 设计测试用例 1 程序流程图 2 控制流
  • git资料

    IDEA中Git的使用 https www cnblogs com javabg p 8567790 html 如何用git将项目代码上传到github https blog csdn net laozitianxia article de
  • Centos 7 大硬盘分区(>2TB) - parted & xfs

    Centos 7 针对超过2T的大硬盘 采用parted分区 1 运行parted命令 进入parted界面后 运行p打印已有分区信息 找到前一个分区终止点 如 2 2028kb 51 2GB xfs 其至终点应为51 2GB 运行mkpa
  • RabbitMQ高级特性(四):RabbitMQ之TTL(存活时间/过期时间)

    RabbitMQ高级特性 四 RabbitMQ之TTL 存活时间 过期时间 TTL 全称 Time To Live 存活时间 过期时间 当消息到达存活时间后 还没有被消费 会被自动清除 RabbitMQ可以对消息设置过期时间 也可以对整个队
  • Symbol的理解和使用

    Symbol的诞生 也就是Symbol存在的意义 之前我们的对象属性的数据类型都是字符串 没有其他的 所以会导致属性名的重复 导致属性值被覆盖的情况 比如 你使用了一个他人提供的对象 但又想为这个对象添加新的方法 在添加的操作就很容易覆盖原
  • java中List集合三种获取集合元素方式

    java中List集合三种获取集合元素方式 1 for 2 迭代器 3 增强for循环 List集合常用方法 List作为Collection集合的子接口 不但继承了Collection接口中的全部方法 而且还增加了一些根据元素索引来操作集
  • IntelliJ IDEA出现红色字体解决办法

    如图所示 问题 ApiModel显示红色 点击alt enter提示需要添加io swagger包到classpath中 因为在pom xml中没有把此包引入 如图 解决方案 在pom xml中添加io swagger包 经历1 当我根据I
  • IDE简介

    集成开发环境 IDE Integrated Development Environment 用于提供程序开发环境的应用程序 一般包括代码编辑器 编译器 调试器和图形用户界面等工具 集成了代码编写功能 分析功能 编译功能 调试功能等一体化的开
  • Atlantis 【POJ - 1151】【扫描线模板题+线段树更新】

    题目链接 是一道扫描线的模板题 也是我的第一道扫描线的题了 对扫描线也算是有了第一次的理解 无非就是更新新的向上的区间长度 然后去查询就是了 而查询是O 1 的 因为可以通过树的最上根节点得到的 include
  • KMP比较简单的讲法。

    转载链接 http blog csdn net yearn520 article details 6729426 我们在一个母字符串中查找一个子字符串有很多方法 KMP是一种最常见的改进算法 它可以在匹配过程中失配的情况下 有效地多往后面跳
  • 捕鱼游戏源码(数值+完整项目资源)

    目前捕鱼游戏的玩法 逐渐有这些趋势 捕鱼玩法 消除类玩法 捕鱼玩法 模拟经营玩法 捕鱼玩法 建造养成玩法 这些趋势已经有龙头企业逐渐开始做出尝试 但是对大部分团队来讲 对垂直领域的理解不够深刻 对产品理解不够深刻 团队没有沉淀和积累 通常都
  • chart.js使用学习——柱状图(2:常用属性设置)

    本文介绍柱状图常用属性及效果 柱状图中有部分常用属性与折线图用法相同 本文仅列出这些属性的简要说明 不再详细说明 base 设置图形绘制时的基准值 数值型 默认值为空 设置的值为数值轴上的值 base值未设置 则绘制的柱状图沿数值轴方向的起
  • [解决报错] Invalid attempt to spread non-iterable instance.In order to be iterable, non-array objects mu

    主要原因是因为用let of 方法遍历的时候 有一个参数为null 没有iterable 所以数据处理错误 换成for循环就好
  • 常用搜索引擎使用技巧

    1 指定站内搜索 使用site指定在某网站内搜索 如只在知乎中搜索 liuwons liuwons site zhihu com 2 精确匹配 使用双引号来指定精确匹配单词或短语 如精确搜索 liuwons liuwons 3 模糊搜索 使
  • 通讯编程001——Nodejs快速开发Modbus TCP Master

    本文介绍如何利用ModbusJs库快速开发Modbus TCP Master 相关源码请登录网信数智 wangxinzhihui com 下载 ModbusJs是一个基于Nodejs的Modbus TCP的开发库 目前支持的功能函数有 re
  • vue-tabel 中使用 el-autocomplete 出现的问题

    必须加 popper append to body false popper class vxetableignoreclear 我自己用的话缺一不可 说一下我自己项目中遇到的问题吧 我写的是表格中套表格 会出现就是当下拉选的时候用 sel

随机推荐

  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • 正则表达式中的特殊字符

    字符 含意 做为转意 即通常在 后面的字符不按原来意义解释 如 b 匹配字符 b 当b前面加了反斜杆后 b 转意为匹配一个单词的边界 或 对正则表达式功能字符的还原 如 匹配它前面元字符0次或多次 a 将匹配a aa aaa 加了 后 a
  • python自学篇十五[Numpy——基础(一):(jupyter Notebook+Anaconda+conda+jupyter配置及简单操作 ]

    文章目录 概括 Numpy Scipy pandas matplotlib 一 Numpy 基础 1 jupyter Notebook 1 安装Anaconda 2 Anaconda是什么 1 Anaconda Navigator 2 Ju
  • DNS欺骗原理及工作工程分析

    DNS欺骗 DNS欺骗是这样一种中间人攻击形式 它是攻击者冒充域名服务器的一种欺骗行为 它主要用于向主机提供错误DNS信息 当用户尝试浏览网页 例如IP地址为XXX XX XX XX 网址为www bankofamerica com 而实际
  • 工作与身体健康之间的平衡

    大厂裁员 称35岁以后体能下滑 无法继续高效率地完成工作 体重上涨 因为35岁以后新陈代谢开始变慢 甚至坐久了会腰疼 睡眠困扰开始加重 在众多的归因中 仿佛35岁的到来 会为一切的焦虑埋下伏笔 实际上 生理年龄不代表全部 体能素质的下降更与
  • 各种汇编器masm masm32 fasm nasm yasm gas的区别

    原文地址 http www verydemo com demo c269 i661 html masm MASM是微软公司开发的汇编开发环境 拥有可视化的开发界面 使开发人员不必再使用DOS环境进行汇编的开发 编译速度快 支持80x86汇编
  • Debug of AMBA AXI Outstanding Transactions

    Verifying today s complex designs is time consuming as simulations run for long time and millions of transaction are exe
  • Win7(WinDbg) + VMware(Win7) 双机调试环境搭建之三

    更多精彩内容 请见 http www 16boke com 环境 主机 Win7 虚拟机 VMware 11 1 0 build 2496824 虚拟机内操作系统 又称GuestOS Win7 WinDbg 适合调试机的相应位数的版本就可以
  • springboot使用Mybatis-Plus实现分页查询

    1 导入依赖 MyBatis Plus opens new window 简称 MP 是一个 MyBatis opens new window 的增强工具 在 MyBatis 的基础上只做增强不做改变 为简化开发 提高效率而生 我个人感觉使
  • JAVA--GUI(2)--布局

    布局 为了更好适应不同平台而引入的概念 Java的布局管理器是一个实现了LayoutManager接口的实例 用户无法设置setLocation 这些方法 如果想自己设置则需要取消布局管理器 采用布局管理器 边界布局 顺序布局 网格布局 卡
  • BMVC 2022 (东京大学)仅需90K参数!实时完成低光增强, 曝光矫正的超轻量级Transformer网络IAT,已开源

    本文由 52CV 粉丝投稿 作者 信息门下奶狗 知乎地址 https zhuanlan zhihu com p 535695807 我们提出Illumination Adaptive Transformer IAT 网络 用来探索实时的暗光
  • CPU体系架构-ARM/MIPS/X86

    转自 http nieyong github io wiki cpu CPU体系架构 ARM MIPS X86 第一部分 从寄存器 寻址方式 汇编指令等方面总结了ARM MIPS X86的异同 CPU体系架构 RISC和CISC CPU体系
  • efi分区隐藏_win10如何隐藏efi分区

    windows10系统升级最新1703版本后发现制作pe系统的u盘插上电脑后会同时显示可见分区和efi分区 以前的efi隐藏手段统统失效了 目前没找到完美的方法 本文的方法是在自己电脑隐藏efi分区 换别的1703版本win10电脑无效 解
  • 利用OpenCV实现人眼的检测与跟踪

    图像处理开发需求 图像处理接私活挣零花钱 请加微信 QQ 2487872782 图像处理开发资料 图像处理技术交流请加QQ群 群号 271891601 本篇博文的基础是 利用OpenCV的级联分类器类CascadeClassifier和Ha
  • 【电机学】直流电机

    直流电机 什么是直流电机 直流电机的工作原理 直流发电机的工作原理 直流电动机的工作原理 可逆性原理 直流电机的主要结构部件 直流电机的电枢绕组 基本特点 并联支路对数 电刷的放置 一些概念 直流电机的磁场 直流电机的空载磁场 电枢电流Ia
  • Win10 自带【屏幕录制】功能(win + G)----(附带:录屏时没有声音,声音不清楚 问题解决;---提取视频中的音频)

    目录 前言 各种工具的快捷键 以及使用 1 Win V 笔记 2 Win G 进入游戏模式 即 运行Xbox Game Bar 3 Win Tab 虚拟桌面 4 Win Shift S 截屏工具 录制视频时 声音超级不清楚 问题解决 1 w
  • SpringBoot:多数据源配置——注解+AOP

    maven依赖
  • Redis系列之发布订阅

    前言 通过Redis可以实现简单的消息 Redis为我们提供了一个发布订阅的功能 下面我们来认识下Redis的发布订阅 发布订阅模型 发布者将消息发布发布到channel频道上 所有订阅了channel频道的客户端都会接收到消息 如下图 相
  • 把思科端口速率改为不协商_端口汇聚—TRUNK技术介绍

    一 概述 随着网络技术的不断发展和应用 网络的速度越来越快 网络的应用也越来越复杂 因此在很多实际应用中网络速度就成为各种网络应用的瓶颈所在 通过升级来提高网络速度是解决问题的一个有效的手段 比如从10M以太网到100M以太网以至于1000
  • Tic-Tac-Toe(三子连)(总结规律)

    Time Limit 1000 mSec Memory Limit 262144 KB Problem Description Kim likes to play Tic Tac Toe Given a current state and