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[][100]) { for (int i=1;i<=3;i++) { for (int j=1;j<=3&&str[i][j]==ch;j++) { if (j==3) return 1; }//行 for (int j=1;j<=3&&str[j][i]==ch;j++) { if (j==3) return 1;//列 } } if (str[1][1]==ch&&str[2][2]==ch&&str[3][3]==ch) { return 1; } else if (str[1][3]==ch&&str[2][2]==ch&&str[3][1]==ch) { return 1; } return 0; } void work () { char str[100][100]; for (int i=1;i<=3;i++) { scanf ("%s",str[i]+1); } int x=0,o=0; for (int i=1;i<=3;i++) { for (int j=1;j<=3;j++) { x += str[i][j]=='X'; o += str[i][j]=='O'; } } if (o>x||x>o+1)//步数不符合 { 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+1)//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 0; }
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?
你的任务是读入棋盘状态,问可不可能是一个有效的三子棋棋盘,也就是说是否存在一系列走棋,能到达该棋盘状态。
posted on 2016-03-31 20:13 stupid_one 阅读(305) 评论(0) 编辑 收藏 举报