305 字
2 分钟
CF1846B Rudolph and Tic-Tac-Toe 题解
其实就是个模拟题,按题意模拟即可
题意简述
题意可以理解为有三个人个人在 的方格中下井字棋,如果三个相同的棋子连成一条线,就可以判定输赢。如果没有人赢则输出 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-题解/