题解:P15068 [UOI 2024 II Stage] Tic-Tac-Toe
第二篇题解,求通过。
题面简述
给定井字棋原来的样子和现在的样子,求井字棋变动是否为合法步骤。
判断条件
- 如果一个位置原来不是空格,后来变了,绝不可能。
- 如果
X和0变化数量大于1 或X的数量小于0的数量,不可能。思路
- 为了方便数据分析,这里把
char换成int。 - 枚举,判断条件一,可以在枚举数组时进行。
- 同时,记下新棋盘
X和0的数量,因为原来的棋盘合法,所以不用判断。 - 判断性质二。
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 记录
切题千万条,学术第一条。作弊抄题解,棕名两行泪!