求助大佬。非常感谢。

你已经两个月没有出门了,无聊到自己和自己玩“一键三连”的游戏。这个游戏很简单,你制作了规格为4×4的棋盘,一开始棋盘中所有格子都是空的,全为‘.’,紧接着你一人分饰两角,一个画‘x’填到一个为空的格子里,另一个画‘o’填到另一个为空的格子,这个过程交替进行。如果一方先使横的、竖的或斜的有连续的三个格子都是属于自己的标记,那么就赢了。

你刚刚看完一个视频,现在准备开始玩“一键三连”,于是你拿出了很久之前的棋盘,它可能下过,也可能没有(即全部填‘.’),但保证此时没有达到画‘o’的胜局。你选择在一个为空的格子里画‘x’后马上停止,看看是否能构成画‘x’的胜局。

输入格式:
输入共四行四列,表示由“.”(表示空的),“x”(小写字母x)或“o”(小写字母o)组成棋盘。

输出格式:
如果你一键三连了,输出“YES”,否则输出“NO”。

输入样例1:
xx..
.oo.
x...
oox.

输出样例1:
YES

输入样例2:
x.ox
ox..
x.o.
oo.x

输出样例2:
NO

我理解是X玩家再走一步胜利就是YES否则就是NO

#include <bits/stdc++.h>
using namespace std;
char mp[10][10];
bool check(){
    for (int i = 0; i < 2; ++i){
            for (int j = 0; j < 2; ++j){
                   if (mp[i][j] == mp[i + 1][j] == mp[i + 2][j] == 'x')//行{
                        return true;
                    }
                    if (mp[i][j] == mp[i + 1][j + 1] == mp[i + 2][j + 2] == 'x')//斜{
                        return true;
                    }
                    if (mp[i][j] == mp[i][j + 1] == mp[i][j + 2] == 'x')//竖{
                        return true;
                    }
                }
        }
        return false;
}
int main(){
    for (int i = 0; i < 4; ++i){
            for (int j = 0; j < 4; ++j) cin >> mp[i][j];
        }
        for (int i = 0; i < 4; ++i){
            for (int j = 0; j < 4; ++j){
                    if (mp[i][j] == '.'){
                            mp[i][j] = 'x';
                                if (check()) {
                                    cout << "YES";
                                        return 0;
                                }
                                else{
                                    mp[i][j] = '.';
                                }
                        }
                }
        }
        cout << "NO";
        return 0;
}