码风很烂,望理解。
#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;
}