2012山东大学校赛,高年级组【Problem F 一字棋 】

Problem F 一字棋
Time Limit: 3000MS
【Description Description Description Description】
“ 一字棋 ” 由 A 、 B 两名棋手交替在 3*3 的棋盘上下棋 , 轮到谁走棋谁就往空格上放一只自己的棋子 , 先使自己的棋子构成 “ 三子成一线 ” ( 同一行或列或对角线全是某人的棋子 )
者取得了胜利,则该局比赛立即结束。若九个格子全部被下满而未出现 “ 三子成一线 ” ,则判为平局。每局由 A 选手首先下。

如图所示,用叉号表示棋手 A 的棋子,用圆圈代表棋手 B 的棋子。则该局 B 取胜。

2012山东大学校赛,高年级组【Problem F 一字棋 】_第1张图片

先给出若干个棋盘,请你判断该棋盘是否可能在某次比赛中出现。
【 【 【 【 Input Input Input Input 】 】 】 】
第一行给出整数 T ( 1<=T<=3000), 表示有 T 个棋局需要判断,接下来给出 T 个 3x 3
矩阵表示棋盘 , 1 代表是选手 A 的棋子 , 2 代表是选手 B 的棋子 , 0 代表该该格子尚未放置
棋子。每两个棋局之间有一空行。
【 【 【 【 Output Output Output Output 】 】 】 】
对于每组测试数据 , 若此棋盘可能在比赛过程中出现则输出 “ YES ” , 否则输出 “ NO ” 。


【 【 【 【 Sample Input 】 】 】 】
3
1 0 2
1 2 0
0 0 0
1 2 1
1 2 2
1 2 0
1 0 2
1 2 2
1 1 0
【 out put】
YES
NO
YES






#include<iostream>
using namespace std;
int main()
{

    int i,T,j,x,A,B,Ax,Bx;
    int a[3][3];
    cin>>T;
    while(T--)
    {
        Ax=0;
        Bx=0;
        A=0;
        B=0;
        for(i=0; i<3; i++)
        {
            for(j=0; j<3; j++)
            {
                cin>>a[i][j];
                if(a[i][j]==1)
                    A++;
                else if(a[i][j]==2)
                    B++;
            }
        }
        if(A-B==1)
        {
            if(a[0][0]==a[0][1]&&a[0][1]==a[0][2]&&(a[0][0]!=0))
            {
                if(a[0][0]==1)
                    Ax++;
                else Bx++;
            }
            if(a[1][0]==a[1][1]&&a[1][1]==a[1][2]&&(a[1][0]!=0))
            {
                if(a[1][0]==1)
                    Ax++;
                else Bx++;
            }
            if(a[2][0]==a[2][1]&&a[2][1]==a[2][2]&&(a[2][0]!=0))
            {
                if(a[2][0]==1)
                    Ax++;
                else Bx++;
            }
            if(a[0][0]==a[1][0]&&a[1][0]==a[2][0]&&(a[0][0]!=0))
            {
                if(a[0][0]==1)
                    Ax++;
                else Bx++;
            }
            if(a[0][1]==a[1][1]&&a[1][1]==a[2][1]&&(a[0][1]!=0))
            {
                if(a[0][1]==1)
                    Ax++;
                else Bx++;
            }
            if(a[0][2]==a[1][2]&&a[1][2]==a[2][2]&&(a[0][2]!=0))
            {
                if(a[0][2]==1)
                    Ax++;
                else Bx++;
            }
            if(a[0][0]==a[1][1]&&a[1][1]==a[2][2]&&(a[0][0]!=0))
            {
                if(a[0][0]==1)
                    Ax++;
                else Bx++;
            }
            if(a[0][2]==a[1][1]&&a[1][1]==a[2][0]&&(a[0][2]!=0))
            {
                if(a[0][2]==1)
                    Ax++;
                else Bx++;
            }
            if(Ax==1&&Bx==0)
                cout<<"YES"<<endl;
            else if(Ax==0&&Bx==0)
                cout<<"YES"<<endl;
            else cout<<"NO"<<endl;
        }
        else if(A==B&&A!=0)
        {
            if(a[0][0]==a[0][1]&&a[0][1]==a[0][2]&&(a[0][0]!=0))
            {
                if(a[0][0]==1)
                    Ax++;
                else Bx++;
            }
            if(a[1][0]==a[1][1]&&a[1][1]==a[1][2]&&(a[1][0]!=0))
            {
                if(a[1][0]==1)
                    Ax++;
                else Bx++;
            }
            if(a[2][0]==a[2][1]&&a[2][1]==a[2][2]&&(a[2][0]!=0))
            {
                if(a[2][0]==1)
                    Ax++;
                else Bx++;
            }
            if(a[0][0]==a[1][0]&&a[1][0]==a[2][0]&&(a[0][0]!=0))
            {
                if(a[0][0]==1)
                    Ax++;
                else Bx++;
            }
            if(a[0][1]==a[1][1]&&a[1][1]==a[2][1]&&(a[0][1]!=0))
            {
                if(a[0][1]==1)
                    Ax++;
                else Bx++;
            }
            if(a[0][2]==a[1][2]&&a[1][2]==a[2][2]&&(a[0][2]!=0))
            {
                if(a[0][2]==1)
                    Ax++;
                else Bx++;
            }
            if(a[0][0]==a[1][1]&&a[1][1]==a[2][2]&&(a[0][0]!=0))
            {
                if(a[0][0]==1)
                    Ax++;
                else Bx++;
            }
            if(a[0][2]==a[1][1]&&a[1][1]==a[2][0]&&(a[0][2]!=0))
            {
                if(a[0][2]==1)
                    Ax++;
                else Bx++;
            }
            if(Ax==0&&Bx==1)
                cout<<"YES"<<endl;
            else if(Ax==0&&Bx==0)
                cout<<"YES"<<endl;
            else cout<<"NO"<<endl;
        }
        else  if(A==0&&B==0)
            cout<<"YES"<<endl;
        else  cout<<"NO"<<endl;
    }
    return 0;

}


 
 

你可能感兴趣的:(2012山东大学校赛,高年级组【Problem F 一字棋 】)