求助
查看原帖
求助
364847
_Kouki_楼主2023/1/7 22:24

码风很烂,望理解。

#include <bits/stdc++.h>

using namespace std;

typedef long long ll;
typedef double db;

const int N = 150;
const int M = 1e5 + 50;
const int Mod = 1e9 + 7;

inline int read()
{
    int x = 0, f = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9')
    {
        if (ch == '-')
            f = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9')
    {
        x = (x << 1) + (x << 3) + (ch ^ 48);
        ch = getchar();
    }
    return x * f;
}

int t, n, m;

string s[N];

int b[N];

bool flag[N];

int main()
{
    t = read();
    while (t--)
    {
        memset(flag, 0, sizeof(flag));
        n = read(), m = read();
        for (int i = 1; i <= m; ++i)
        {
            cin >> s[i];
            b[i] = read();
        }
        int q = m;
        int ansflag = 0;
        while (q--)
        {
            for (int j = 0; j < n; ++j)
            {
                int k1 = -1, k2 = -1;
                queue<int> q1, q2;
                for (int i = 1; i <= m; ++i)
                {
                    if (flag[i])
                        continue;
                    if (b[i] == 1)
                    {
                        if (s[i][j] == '1')
                        {
                            if (k1 == -1)
                                k1 = 1;
                            else if (k1 != 1)
                                k1 = 2;
                        }
                        else
                        {
                            if (k1 == -1)
                                k1 = 0;
                            else if (k1 != 0)
                                k1 = 2;
                        }
                        q1.push(i);
                    }
                    else
                    {
                        if (s[i][j] == '1')
                        {
                            if (k2 == -1)
                                k2 = 1;
                            else if (k2 != 1)
                                k2 = 2;
                        }
                        else
                        {
                            if (k2 == -1)
                                k2 = 0;
                            else if (k2 != 0)
                                k2 = 2;
                        }
                        q2.push(i);
                    }
                }
                if (k1 == 2 && k2 == 2)
                    continue;
                if (k1 == 2)
                {
                    while (!q1.empty())
                        flag[q1.front()] = (k2 != (s[q1.front()][j] - '0')), q1.pop();
                }
                else if (k2 == 2)
                {
                    while (!q2.empty())
                        flag[q2.front()] = (k1 == (s[q2.front()][j] - '0')), q2.pop();
                }
                else
                {
                    if (k1 == k2)
                        continue;
                    puts("OK");
                    ansflag = 1;
                    break;
                }
            }
            if (ansflag)
                break;
        }
        if (ansflag)
            continue;
        ansflag = 0;
        for (int i = 1; i <= m; ++i)
            if (!flag[i])
                ansflag = 1;
        if (ansflag)
        {
            puts("LIE");
        }
        else
        {
            puts("OK");
        }
    }
    return 0;
}
2023/1/7 22:24
加载中...