模拟法
(模拟法) $O(n*m*m)$
时间复杂度
nmm
C++ 代码
#include <iostream>
#include <cstring>
using namespace std;
const int M = 40;
const int N = 10;
int d[M][M], l[M][M], s[N][N][M];
int f[M][M];
int main()
{
cin.tie(0);
ios::sync_with_stdio(false);
int n;
cin >> n;
for(int y = 1; y <= n; y ++)
{
int m;
cin >> m;
memset(d, 0, sizeof d);
memset(l, 0, sizeof l);
memset(s, 0, sizeof s);
memset(f, 0, sizeof f);
bool flag = true;
for(int k = 0; k < m * m * m * m; k ++)
{
int i = k / (m * m), j = k % (m * m);
cin >> f[i][j];
int t = f[i][j];
if(t < 1 || t > m * m || ++ d[i][t] > 1 || ++ l[j][t] > 1 || ++ s[i / m][j / m][t] > 1)
flag = false;
}
if(flag) cout << "Case #" << y << ": Yes" << endl;
else cout << "Case #" << y << ": No" << endl;
}
return 0;
}