AcWing 703. 数独检查
题意:
要你check一个数独是否合法。
思路:
模拟即可。
AC
# include <bits/stdc++.h>
using namespace std;
int a[40][40];
int n;
bool check(){
// line
int x, y;
for(int i = 0; i< n*n; i++){
vector<int>vis(n*n+1);
for(int j = 0; j < n*n; j ++ )vis[a[i][j]]++;
for(int k = 1; k <= n*n; k++)if(vis[k]>1||vis[k]<1)return false;
}
// col
for(int j = 0; j < n*n; j ++ ){
vector<int>vis(n*n+1);
for(int i = 0; i < n*n ; i++ )vis[a[i][j]]++;
for(int k =1; k <= n*n; k ++ )if(vis[k]>1||vis[k]<1)return false;
}
//matrix
y = 0,x = 0;
for(int k = 0; k < n*n ; k ++ ){
if(k==0)x=0, y = 0;
else if(k%n==0)x+=n,y=0;
else y+=n;
vector<int>vis(n*n+1);
for(int i = x; i <x+n; i ++){
for(int j = y; j < y+n; j ++ )vis[a[i][j]]++;
}
for(int num = 1; num<=n*n; num++)if(vis[num] > 1 || vis[num] < 1)return false;
}
return true;
}
int main(){
int tt, cas = 0;
scanf("%d", &tt);
while(tt--){
scanf("%d", &n);
for(int i = 0; i < n*n ; i++ ){
for(int j =0 ; j < n*n; j++)scanf("%d", a[i]+j);
}
bool ok = check();
printf("Case #%d: ", ++cas);
if(ok)puts("Yes");
else puts("No");
}
return 0;
}