Codeforces 3C

题意

给你一个井字棋的棋谱,判断井字棋的状态
first, 第一个人走
second 第二个人走
illegal 不合法
the first player won 第一个人赢
the second player won 第二个人赢
draw 平局

思路

暴力枚举每种赢的状态
答案中没有这种样例 (思考一下)

X0X
00X
0XX

代码

/* ********************************************** Auther: Çë½ÐÎÒacmÔüÔü Created Time: 2015-7-29 15:37:22 File Name : 3c.cpp *********************************************** */
#include <iostream>
#include <fstream>
#include <cstring>
#include <climits>
#include <deque>
#include <cmath>
#include <queue>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <utility>
#include <sstream>
#include <complex>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstdio>
#include <ctime>
#include <bitset>
#include <functional>
#include <algorithm>
using namespace std;
#define lson L,m,rt<<1
#define rson m+1,R,rt<<1|1
#define ll long long
#define N 11111

char mp[4][4];
int flag1 ;
int flag2 ;
void judge1(){
        if(mp[0][0]=='X'&&mp[0][1]=='X'&&mp[0][2]=='X') flag1 = 1;
        if(mp[1][0]=='X'&&mp[1][1]=='X'&&mp[1][2]=='X') flag1 = 1;
        if(mp[2][0]=='X'&&mp[2][1]=='X'&&mp[2][2]=='X') flag1 = 1;
        if(mp[0][0]=='X'&&mp[1][0]=='X'&&mp[2][0]=='X') flag1 = 1;
        if(mp[0][1]=='X'&&mp[1][1]=='X'&&mp[2][1]=='X') flag1 = 1;
        if(mp[0][2]=='X'&&mp[1][2]=='X'&&mp[2][2]=='X') flag1 = 1;
        if(mp[0][0]=='X'&&mp[1][1]=='X'&&mp[2][2]=='X') flag1 = 1;
        if(mp[0][2]=='X'&&mp[1][1]=='X'&&mp[2][0]=='X') flag1 = 1;
}
void judge2(){
        if(mp[0][0]=='0'&&mp[0][1]=='0'&&mp[0][2]=='0') flag2 = 1;
        if(mp[1][0]=='0'&&mp[1][1]=='0'&&mp[1][2]=='0') flag2 = 1;
        if(mp[2][0]=='0'&&mp[2][1]=='0'&&mp[2][2]=='0') flag2 = 1;
        if(mp[0][0]=='0'&&mp[1][0]=='0'&&mp[2][0]=='0') flag2 = 1;
        if(mp[0][1]=='0'&&mp[1][1]=='0'&&mp[2][1]=='0') flag2 = 1;
        if(mp[0][2]=='0'&&mp[1][2]=='0'&&mp[2][2]=='0') flag2 = 1;
        if(mp[0][0]=='0'&&mp[1][1]=='0'&&mp[2][2]=='0') flag2 = 1;
        if(mp[0][2]=='0'&&mp[1][1]=='0'&&mp[2][0]=='0') flag2 = 1;
}
int main(){
    for(int i=0;i<3;i++){
        scanf("%s",mp[i]);
    }
    int cnt1=0,cnt2=0;
    flag1 = 0;
    flag2 = 0;
    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            if(mp[i][j]=='X') cnt1++;
            if(mp[i][j]=='0') cnt2++;
        }
    }
   // printf("%d %d %d\n",cnt1,cnt2,abs(cnt1-cnt2));
    judge1();
    judge2();
    if(cnt1-cnt2>1||cnt2>cnt1){
       puts("illegal");
       return 0;
    }

    if(cnt1+cnt2!=9&&abs(cnt1-cnt2)<=1){
        if(flag1&&flag2) puts("illegal");
        else if(flag1&&cnt1>cnt2) puts("the first player won");
        else if(flag2&&cnt2==cnt1) puts("the second player won");
        else if(flag2&&cnt1>cnt2||(flag1&&cnt1==cnt2)) puts("illegal");
        else{
        if(cnt1>cnt2) puts("second");
        else puts("first");
        }
    }

    if(cnt1+cnt2==9){
    if(flag1&&flag2) puts("illegal");
    if(!flag1&&!flag2) puts("draw");
    if(flag1) puts("the first player won");
    if(flag2) puts("illegal");
    }
}

你可能感兴趣的:(codeforces)