POJ 2361 Tic Tac Toe
题目:给定一个3*3的矩阵,是一个井字过三关游戏。开始为X先走,问你这个是不是一个合法的游戏。也就是,现在这种情况,能不能出现。如果有人赢了,那应该立即停止。那么可以知道X的步数和O的步数应该满足x==o+1或者x==o
这种情况是允许的,
这种情况是O赢。(x==o)
这种情况是X赢(x==o+1)。那么就可以知道
如果
①、如果x>o+1(步数过多)||o>x(不符合x先行的规矩) printf("no\n");
②、如果是x赢了win(x)但是x!=o+1 不行
③、如果是O赢了win(o)但是x!=o 不行
④、两个同时赢了 不行, 但是这个和上面的重合了的,上面判断了要么O赢要么X赢,然而步数也只有x==o或者x==o+1两种,那么必然会进入其中一个判断那里(前提是你判断的win(x)和win(o)都是赢)。那么就可以不用判断啦
这里我学习到别人的代码判断是否赢win(x) 思路非常不错。学习了。。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <algorithm>
using namespace std;
#define inf 1<<28
#define MAX(x,y) ((x)>(y)?(x):(y))
#define MIN(x,y) ((x)>(y)?(y):(x))
#define MID(x,y) (MAX(x,y)-((MAX(x,y)-MIN(x,y))>>1))
#define istwopow(x) ((x&(x-1))==0)
#define LL __int64 #include <iostream>
#include <sstream>
#include <vector>
#include <set>
#include <map>
#include <queue>
#include <string>
int win (char ch,char str[][])
{
for (int i=;i<=;i++)
{
for (int j=;j<=&&str[i][j]==ch;j++)
{
if (j==) return ;
}//行
for (int j=;j<=&&str[j][i]==ch;j++)
{
if (j==) return ;//列
}
}
if (str[][]==ch&&str[][]==ch&&str[][]==ch)
{
return ;
}
else if (str[][]==ch&&str[][]==ch&&str[][]==ch)
{
return ;
}
return ;
}
void work ()
{
char str[][];
for (int i=;i<=;i++)
{
scanf ("%s",str[i]+);
}
int x=,o=;
for (int i=;i<=;i++)
{
for (int j=;j<=;j++)
{
x += str[i][j]=='X';
o += str[i][j]=='O';
}
}
if (o>x||x>o+)//步数不符合
{
printf ("no\n");
return ;
}
char ch1='X';
char ch2='O';
if (win(ch2,str)&&o!=x)//o赢应该步数相等
{
printf ("no\n");
return ;
}
if (win(ch1,str)&&x!=o+)//x赢应该步数x==o+1
{
printf ("no\n");
return ;
}
printf ("yes\n");
return ;
}
int main ()
{
freopen("data.txt","r",stdin);
int t;
scanf ("%d",&t);
while (t--)
{
work ();
}
return ;
}
Your job is to read a grid and to determine whether or not it could possibly be part of a valid Tic Tac Toe game. That is, is there a series of plays that can yield this grid somewhere between the start and end of the game?
你的任务是读入棋盘状态,问可不可能是一个有效的三子棋棋盘,也就是说是否存在一系列走棋,能到达该棋盘状态。
POJ 2361 Tic Tac Toe的更多相关文章
- Principle of Computing (Python)学习笔记(7) DFS Search + Tic Tac Toe use MiniMax Stratedy
1. Trees Tree is a recursive structure. 1.1 math nodes https://class.coursera.org/principlescomputin ...
- 【leetcode】1275. Find Winner on a Tic Tac Toe Game
题目如下: Tic-tac-toe is played by two players A and B on a 3 x 3 grid. Here are the rules of Tic-Tac-To ...
- 2019 GDUT Rating Contest III : Problem C. Team Tic Tac Toe
题面: C. Team Tic Tac Toe Input file: standard input Output file: standard output Time limit: 1 second M ...
- [CareerCup] 17.2 Tic Tac Toe 井字棋游戏
17.2 Design an algorithm to figure out if someone has won a game oftic-tac-toe. 这道题让我们判断玩家是否能赢井字棋游戏, ...
- Epic - Tic Tac Toe
N*N matrix is given with input red or black.You can move horizontally, vertically or diagonally. If ...
- python 井字棋(Tic Tac Toe)
说明 用python实现了井字棋,整个框架是本人自己构思的,自认为比较满意.另外,90%+的代码也是本人逐字逐句敲的. minimax算法还没完全理解,所以参考了这里的代码,并作了修改. 特点 可以选 ...
- ACM-Team Tic Tac Toe
我的代码: #include <bits/stdc++.h> using namespace std; int main() { char a[3][3]; int i,j=0; for( ...
- LeetCode 5275. 找出井字棋的获胜者 Find Winner on a Tic Tac Toe Game
地址 https://www.acwing.com/solution/LeetCode/content/6670/ 题目描述A 和 B 在一个 3 x 3 的网格上玩井字棋. 井字棋游戏的规则如下: ...
- HOJ题目分类
各种杂题,水题,模拟,包括简单数论. 1001 A+B 1002 A+B+C 1009 Fat Cat 1010 The Angle 1011 Unix ls 1012 Decoding Task 1 ...
随机推荐
- JavaScript-Tool:jquery.cxselect.js
ylbtech-JavaScript-Tool:jquery.cxselect.js 1.返回顶部 1.jquery.cxselect.js /*! * jQuery cxSelect * @name ...
- swift-get-nodes简单使用
在参考http://blog.csdn.net/cywosp/article/details/12850645文章对对象的具体物理磁盘位置进行查找时,发现两个问题: 1. 在使用swift+keyst ...
- 第 七 课 go的运算符
http://www.runoob.com/go/go-operators.html 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符 返回变量存储地址: & 指针变量: ...
- BluetoothFindRadioClose 函数
BOOL BluetoothFindRadioClose( HBLUETOOTH_RADIO_FIND hFind );关闭与查找蓝牙无线电相关的枚举句柄.参数: hFind Enumeration ...
- 洛谷-跑步-NOI导刊2010提高
新牛到部队, CG 要求它们每天早上搞晨跑,从A农场跑到B农场.从A农场到B农场中有n-2个路口,分别标上号,A农场为1号, B农场为n号,路口分别为 2 ..n -1 号,从A农场到B农场有很多条路 ...
- JavaScript代码存在形式
<!-- 方式一 --> <script type"text/javascript" src="JS文件"></script> ...
- redis-数据类型-string、hash、list、set、zset
String 类型操作string是redis最基本的类型,而且string类型是二进制安全的.意思是redis的string可以包含任何数据.比如jpg图片或者序列化的对象. $redis-> ...
- [Uva12260]Free Goodies(dp+贪心)
解题关键:先对p进行排序,消除p的影响,然后对w进行01背包即可.注意p对w的约束.j<=(cur+1)/2 #include<cstdio> #include<cstring ...
- Maven 命令格式及一些常用命令
Maven自身指定定义了一套对项目进行编译,测试,打包,运行,部署等工作的抽象.Maven自己是不实际负责这些工作的,而是把它们交给了插件.所以Maven命令的实际工作执行者是各种各样的插件. 要了解 ...
- 正则表达式需要匹配的内容本身就自带了html转义字符,需要转义,否则无法匹配
1.正则表达式需要匹配的内容本身就自带了html转义字符,需要转义,否则无法匹配 例如,对于"requestNo\":\"3b89957436eaacd8311535e0 ...