题解:P15068 [UOI 2024 II Stage] Tic-Tac-Toe

· · 题解

这题是要求再下一步棋可不可以到另一个状态,那么我们可以知道,原来的一个空位如果变了棋子,那么为可以,如果改变了更多即不行。

而且 0 的数量不可能大于 X 的数量,因为 X 为先手,那么我们就可以手搓代码。

AC Code:

#include<bits/stdc++.h>
using namespace std;
int a[5][5],b[5][5];
int sumX,sumO,sumX1,sumO1;
int main(){
    for(int i=1;i<=3;i++){
        for(int j=1;j<=3;j++){
            char c;
            cin>>c;
            if(c=='0'){
                a[i][j]=2;
                sumO1++;
            }else if(c=='X'){
                a[i][j]=1;
                sumX1++;
            }
        }
    }
    for(int i=1;i<=3;i++){
        for(int j=1;j<=3;j++){
            char c;
            cin>>c;
            if(c=='0'){
                b[i][j]=2;
                sumO++;
            }else if(c=='X'){
                b[i][j]=1;
                sumX++;
            }

        }
    }
    if(sumX<sumO||sumX-sumO>1){
        cout<<"NO";
        return 0;
    }
    int kX=0,kO=0;
    for(int i=1;i<=3;i++){
        for(int j=1;j<=3;j++){
            if(a[i][j]!=0&&a[i][j]!=b[i][j]){
                cout<<"NO";
                return 0;
            }
            if(a[i][j]==0&&a[i][j]!=b[i][j]){
            if(b[i][j]==2){
                kO++;
            }else if(b[i][j]==1){
                kX++;
            }
            }
        }
    }
    if(kO+kX<=1){
        cout<<"YES";
    }else{
        cout<<"NO";
    }
    return 0;
}

完结撒花~~