竞赛讨论区 > E题井字棋已考虑了L型但只过40%样例求错误样例
头像
Amadeus027
发布于 02-09 19:12 福建
+ 关注

E题井字棋已考虑了L型但只过40%样例求错误样例

代码如下:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)

void solve() {
    int n = 3;
    vector <string> s(n);
    for (int i=0; i<n; i++) {
        cin >> s[i];
    }
    int flag = 0;
    for (int i=0; i<n; i++) {
        for (int j=0; j<n; j++) {
            int kk = 0;
            if (s[i][j] == 'X') {
                if (i == j || i + j == 2) {
                    for (int k=0; k<3; k++) {
                        if (s[k][k] != 'O') {
                            kk++;
                        }
                    }
                    if (kk == 3) {
                        flag = 1;
                    }
                    kk = 0;
                    for (int k=0; k<3; k++) {
                        if (s[k][2-k] != 'O') {
                            kk++;
                        }
                    }
                    if (kk == 3) {
                        flag = 1;
                    }
                    kk = 0;
                }
                for (int k=0; k<3; k++) {
                    if (s[i][k] != 'O') {
                        kk++;
                    }
                }
                if (kk == 3) {
                    flag = 1;
                }
                kk = 0;
                for (int k=0; k<3; k++) {
                    if (s[k][j] != 'O') {
                        kk++;
                    }
                }
                if (kk == 3) {
                    flag = 1;
                }
                kk = 0;
            }
        }
    }
    for (int i=0; i<n; i++) {
        for (int j=0; j<n; j++) {
            int cnt = 0;
            int kk = 0;
            if (s[i][j] == 'G') {
                if (i == j || i + j == 2) {
                    for (int k=0; k<3; k++) {
                        if (s[k][k] == 'G') {
                            kk++;
                        }
                    }
                    if (kk == 3) {
                        cnt++;
                    }
                    kk = 0;
                    for (int k=0; k<3; k++) {
                        if (s[k][2-k] == 'G') {
                            kk++;
                        }
                    }
                    if (kk == 3) {
                        cnt++;
                    }
                    kk = 0;
                }
                for (int k=0; k<3; k++) {
                    if (s[i][k] == 'G') {
                        kk++;
                    }
                }
                if (kk == 3) {
                    cnt++;
                }
                kk = 0;
                for (int k=0; k<3; k++) {
                    if (s[k][j] == 'G') {
                        kk++;
                    }
                }
                if (kk == 3) {
                    cnt++;
                }
                kk = 0;
                if (cnt >= 2) {
                    flag = 1;
                }
            }
        }
    }
    if (flag == 1) {
        cout << "Yes\n";
    } else {
        cout << "No\n";
    }
}

signed main ()
{
    IOS;
    int t = 1;
    cin >> t;
    while(t--){
        solve();
    }
    return 0;
}

全部评论

(0) 回帖
加载中...
话题 回帖

等你来战

查看全部

热门推荐