AcWing 1725. 组队井字游戏 =》 代码还算比较短吧
原题链接
简单
作者:
虎头虎脑
,
2022-04-02 10:00:52
,
所有人可见
,
阅读 447
$\color{red}{点个爱心吧}$
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
#include <set>
using namespace std;
char a[4][4];
set<int> cnt_1, l, r;
set<set<int>>cnt_2;
int main()
{
for(int i = 0; i < 3; ++ i) scanf("%s", a[i]);
for(int i = 0; i < 3; ++ i)
{
set<int> t, d;
for(int j = 0; j < 3; ++ j)
t.insert(a[i][j]), d.insert(a[j][i]); //分别记录横竖情况
if(t.size() == 1) cnt_1.insert(a[i][0]); //横着
else if(t.size() == 2) cnt_2.insert(t);
if(d.size() == 1) cnt_1.insert(a[0][i]); //竖着
else if(d.size() == 2) cnt_2.insert(d);
l.insert(a[i][i]), r.insert(a[i][2 - i]); //交叉情况记录
}
int p = l.size(), q = r.size();
if(l == r && p == 1) cnt_1.insert(a[0][0]); //交叉情况相同
else if(l == r && p == 2) cnt_2.insert(l);
if(p == 1) cnt_1.insert(a[0][0]); //交叉情况不同
else if(p == 2) cnt_2.insert(l);
if(q == 1) cnt_1.insert(a[0][2]);
else if(q == 2) cnt_2.insert(r);
cout << cnt_1.size() << endl;
cout << cnt_2.size() << endl;
}