305 字
2 分钟
CF1846B Rudolph and Tic-Tac-Toe 题解

其实就是个模拟题,按题意模拟即可

题意简述#

题意可以理解为有三个人个人在 3×33\times3 的方格中下井字棋,如果三个相同的棋子连成一条线,就可以判定输赢。如果没有人赢则输出 DRAW

分析#

连接的方式可分为三类:横行、竖列、对角线。共八种情况,所以只需要判断是否满足这八种情况然后输出即可。注意在判断的时候要排去 . ,不能把空行也算作一种。具体可看代码。

代码#

inline void Solve()
{
string a[3];//存储地图,注意string是从零开始的
cin >> a[0];
cin >> a[1];
cin >> a[2];
//cout << T<<endl;
//cout << a[0][2]<<endl;
//注意排除空行
if (a[0][0] == a[1][0]&&a[0][0] == a[2][0]&&a[0][0]!='.'){//判断第一列
cout << a[0][0] << endl;
return;
}
if(a[0][1]==a[1][1]&&a[0][1]==a[2][1]&&a[0][1]!='.'){//第二列
cout << a[0][1] << endl;//cout << 1;
return;
}
if(a[0][2]==a[1][2]&&a[0][2]==a[2][2]&&a[0][2]!='.'){//第三列
cout << a[0][2] << endl;
return;
}
if (a[0][0] == a[0][1]&&a[0][0] == a[0][2]&&a[0][0]!='.'){//第一行
cout << a[0][0] << endl;
return;
}
if(a[1][0]==a[1][1]&&a[1][0]==a[1][2]&&a[1][0]!='.'){//第二行
cout << a[1][0] << endl;
return;
}
if(a[2][0]==a[2][1]&&a[2][0]==a[2][2]&&a[2][0]!='.'){//第三行
cout << a[2][0] << endl;
return;
}
if(a[0][0]==a[1][1]&&a[0][0]==a[2][2]&&a[0][0]!='.'){//对角线1
cout << a[0][0] << endl;
return;
}
if(a[0][2]==a[1][1]&&a[0][2]==a[2][0]&&a[0][2]!='.'){//对角线2
cout << a[0][2] << endl;
return;
}
cout << "DRAW" << endl;//如果都不符合
}
CF1846B Rudolph and Tic-Tac-Toe 题解
https://blog.introl.top/posts/cf1846b-rudolph-and-tic-tac-toe-题解/
作者
Introl
发布于
2023-07-09
许可协议
CC BY-NC-SA 4.0