A. Sudoku Checker
题意简要是:给定一个N^2 * N^2的矩阵,判断矩阵是否为数独。
这题根据数独的定义检查这个矩阵,即:每行和每一列、N^2个矩阵,是不是包含1-N^2。有一点就是输入的数可能不在1-N^2的范围。代码如下
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
public class HelloWorld {
public static void main(String[] args) {
try {
// BufferedReader br = new BufferedReader(new FileReader("D:/codejam/a.txt"));
// BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
// BufferedReader br = new BufferedReader(new FileReader("D:/codejam/A-small-attempt0.in"));
// BufferedReader br = new BufferedReader(new FileReader("D:/codejam/A-small-attempt1.in"));
// BufferedWriter bw = new BufferedWriter(new FileWriter("D:/codejam/A-small-result.txt"));
BufferedReader br = new BufferedReader(new FileReader("D:/codejam/A-large.in"));
BufferedWriter bw = new BufferedWriter(new FileWriter("D:/codejam/A-large-result.txt"));
String line;
line = br.readLine();
int T = Integer.parseInt(line);
for (int cas = 1; cas <= T; cas++) {
line = br.readLine();
int n = Integer.parseInt(line);
int table[][] = new int[n*n][n*n];
int N = n * n;
boolean ok = true;
for (int i = 0; i < N; i++) {
line = br.readLine();
String[] tmp = line.split(" ");
for (int j= 0; j < tmp.length;j++) {
table[i][j] = Integer.parseInt(tmp[j]) - 1;
if (table[i][j] < 0 || table[i][j] >= N) {
ok = false;
}
}
}
if (ok) {
for (int i = 0; i < N; i++) {
boolean[] all = new boolean[N];
Arrays.fill(all, false);
// row
for (int j = 0; j < N; j++) {
all[table[i][j]] = true;
}
for (int j = 0; j < N; j++) if (!all[j]) {
ok = false;
}
// column
Arrays.fill(all, false);
for (int j= 0;j < N; j++) {
all[table[j][i]] = true;
}
for (int j = 0; j < N; j++) if (!all[j]) {
ok = false;
}
// matrix
Arrays.fill(all, false);
for (int j = 0; j < N; j++) {
int row = (i / n * n) + j / n;
int col = (i % n * n) + j % n;
all[table[row][col]] = true;
}
for (int j = 0; j < N; j++) if (!all[j]) {
ok = false;
}
}
}
String ret = "Yes";
if (!ok) ret = "No";
bw.write("Case #" + cas +": " + ret);
bw.newLine();
bw.flush();
}
br.close();
bw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}