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 ...
随机推荐
- Poj1218_THE DRUNK JAILER(水题)
一.Description A certain prison contains a long hall of n cells, each right next to each other. Each ...
- JAVA 1.5 并发之 Executor框架 (二)execute VS submit
http://www.cnblogs.com/rockman12352/p/3788688.html 上一篇对于整体框架讲了很多东西,但是具体在使用时有一些细节并没有说出来 首先是执行任务 execu ...
- Ruby模块(module)
Ruby模块(module) 2013-04-03 16:47:09| 分类: Ruby | 标签:ruby require load extend include |字号 订阅 ...
- excel2003, 2007最大行列、sheet数
1.excel2003版本一个工作表最多可有65536行,行用数字1—65536表示; 256列,列用英文字母A—Z,AA—AZ,BA—BZ,……,IA—IV表示.2.一个工作簿中最多含有25 ...
- USB插拔检测程序
一.手动添加ON_WM_DEVICECHANGE()消息 二.添加头文件#include <Dbt.h> 三.定义设备的GUID static const GUID GUID_DEVINT ...
- 特征降维之SVD分解
奇异值分解.特征值分解是一个提取矩阵特征很不错的方法,但是它只是对方阵而言的,在现实的世界中,我们看到的大部分矩阵都不是方阵,比如说有N个学生,每个学生有M科成绩,这样形成的一个N * M的矩阵就不可 ...
- [poj3264]rmq算法学习(ST表)
解题关键:rmq模板题,可以用st表,亦可用线段树等数据结构 log10和log2都可,这里用到了对数的换底公式 类似于区间dp,用到了倍增的思想 $F[i][j] = \min (F[i][j - ...
- mongodb 修改操作
$addToSet与$each结合完成批量数组更新 db.text.update({_id:1000},{$addToSet:{books:{$each:["js","d ...
- 6.7 安装vim
- LightOJ 1311 Unlucky Bird (物理题)
题意:有点长,意思是说有一个鸟,在两列火车之间不停的来回飞,两列相距为d时,都开始减速,直到最后停止下来,正好是相距0米, 现在给定两列车的速度和减速时的加速度,和鸟的速度求 d 和鸟飞过的路程. 析 ...