题解:P15068 [UOI 2024 II Stage] Tic-Tac-Toe
Warren1022 · · 题解
题解:P15068 [UOI 2024 II Stage] Tic-Tac-Toe
思路
比较棋盘
- 只能走一步(
X 先手,所以下一步是O )。 - 合法操作:在空位放一个
O 。 - 检查
B 是否比A 多一个O ,且其他格子相同。
算法
- 统计
A 和B 中X 和0 的数量 - 检查差异:
- 如果
B 比A 多一个O ,且X 数量相同→ 可能。 - 否则
→ 不可能。
- 如果
- 还要检查
B 中每个格子是否合法:- 不能把
A 中的棋子改成别的。 - 只能把
. 改成O 。
- 不能把
代码
#include<bits/stdc++.h>
using namespace std;
int main(){
string a[3], b[3];
for(int i=0;i<3;i++) cin>>a[i];
for(int i=0;i<3;i++) cin>>b[i];
int ax=0, ao=0, bx=0, bo=0;
bool ok=true;
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
if(a[i][j]=='X') ax++;
if(a[i][j]=='0') ao++;
if(b[i][j]=='X') bx++;
if(b[i][j]=='0') bo++;
// 检查格子变化是否合法
if(a[i][j]!='.' && b[i][j]!=a[i][j]) ok=false;
}
}
if(ok && bx==ax && bo==ao+1) cout<<"YES";
else cout<<"NO";
return 0;
}