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 ...
随机推荐
- 优秀开源项目之三:高性能、高并发、高扩展性和可读性的网络服务器架构State Threads
译文在后面. State Threads for Internet Applications Introduction State Threads is an application library ...
- Python:.join()函数
转于:https://blog.csdn.net/chixujohnny/article/details/53301995 博主:chixujohnny 介绍:.join是一个字符串操作函数,将元素相 ...
- 【转】 Pro Android学习笔记(五五):调试和分析(3):adb命令、模拟器控制台和StrictMode
目录(?)[-] adb命令 模拟器Console StrictMode adb命令 我们在学习SQLite的使用,介绍过部分adb命令的使用,见Pro Android学习笔记(五):了解Conten ...
- java代码for循环+缓冲流类
总结:这个结果竟然是对的.我错了. package com.da; //创建一个String对象的数组,然后执行读取文本,把文本每一行存入数组,它将读取到100行 //或直接到你按”stop“才停止, ...
- nginx用cookie控制访问权限实现方法
自己的一个需求需要对a.b.com 下的 /c 这个目录下,cookie d=e 才能访问,如果不是,就重定向到f.html 下面看代码. 代码如下 复制代码 server{ serve ...
- kafka之一:Windows上搭建Kafka运行环境
搭建环境 1. 安装JDK 1.1 安装文件:http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-213315 ...
- js一个游戏小笔记
昨天写了个飞机大战的游戏,没弄好的一点是如何移动炮台. 开始我把移动代码写到了炮台类里面,但是怎么按都不移动.(最烦,代码对,效果不对,╮(╯▽╰)╭) 问过老师才知道,这种移动类游戏,应该把 控制 ...
- 8.ireport 取消自动分页,detail不分页
转自:http://www.blogjava.net/vjame/archive/2013/10/12/404908.html 报表文件属性页面 lgnore pagination 勾选上,就可以取消 ...
- MySql数据库数据更新操作其高级应用
数据更新操作有3种:向表中添加数据.修改表中的数据和删除表中的数据. 用来演示的数据表用student.course.sc三个数据表,数据表具体内容在:PHP和MySql数据库,如何获取每个分类的记录 ...
- 1. sqlmap超详细笔记+思维导图
sqlmap思维导图: 基本操作笔记: -u #注入点 -f #指纹判别数据库类型 -b #获取数据库版本信息 -p #指定可测试的参数(?page=1&id=2 -p "page, ...