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

· · 题解

第二篇题解,求通过。

题面简述

给定井字棋原来的样子和现在的样子,求井字棋变动是否为合法步骤。

判断条件

  1. 如果一个位置原来不是空格,后来变了,绝不可能。
  2. 如果 X0 变化数量大于 1X 的数量小于 0 的数量,不可能。

    思路

  3. 为了方便数据分析,这里把 char 换成 int
  4. 枚举,判断条件一,可以在枚举数组时进行。
  5. 同时,记下新棋盘 X0 的数量,因为原来的棋盘合法,所以不用判断。
  6. 判断性质二。

    AC code

    ::::success[代码]

    #include<bits/stdc++.h>
    using namespace std;
    char a[3][3], b[3][3];
    int main(){
    for(int i = 0; i < 3; i++){
        for(int j = 0; j < 3; j++){
            char c;
            cin >> c;
            if(c == '.') a[i][j] = 0;
            if(c == 'X') a[i][j] = 1;
            if(c == '0') a[i][j] = 2; // 方便数组存储
        }
    }
    for(int i = 0; i < 3; i++){
        for(int j = 0; j < 3; j++){
            char c;
            cin >> c;
            if(c == '.') b[i][j] = 0;
            if(c == 'X') b[i][j] = 1;
            if(c == '0') b[i][j] = 2;
        }
    }
    int cnt = 0, res[2] = {0};
    for(int i = 0; i < 3; i++){
        for(int j = 0; j < 3; j++){
            if(a[i][j] != b[i][j] && a[i][j] != 0){ // 判断条件一
                cout << "NO";
                return 0;
            }
            res[b[i][j] - 1]++;
        }
    }
    if(res[0] >= res[1] && res[0] - res[1] <= 1){ // 判断条件二,注意不要忘记 0 比 X 多也是不行的,容易错
        cout << "YES";
    }else{
        cout << "NO";
    }
    return 0;
    }
    /*
    directed by Bright_algorithmer01
    this is a solution
    */

    :::: AC 记录

切题千万条,学术第一条。作弊抄题解,棕名两行泪!