Untitled
unknown
plain_text
a year ago
3.7 kB
13
Indexable
package H2004;
import java.util.Scanner;
class Solution {
private static Scanner sc;
private static UserSolution usersolution = new UserSolution();
private final static int MAX_PICTURE_SIZE = 1000;
private final static int MAX_PIECE_SIZE = 100;
private final static int MAXN = 1500;
private static int mSeed;
private static int pseudo_rand() {
mSeed = mSeed * 431345 + 2531999;
return mSeed & 0x7FFFFFFF;
}
private static char mergedPicture[][] = new char[MAX_PICTURE_SIZE][MAX_PICTURE_SIZE];
private static char ret[][] = new char[MAX_PICTURE_SIZE][MAX_PICTURE_SIZE];
private static char scrap[][][] = new char[MAXN][MAX_PIECE_SIZE][MAX_PIECE_SIZE];
private static int scrapIdx[][] = new int[MAX_PICTURE_SIZE][MAX_PICTURE_SIZE];
private static int seed, N, M, K;
private static int flag;
private static int PASS;
private static int FAIL = 0;
private static boolean used[] = new boolean[MAXN];
private static int dx[] = { 1, 0, -1, 0 };
private static int dy[] = { 0, 1, 0, -1 };
public static boolean setPicture(int id, int x, int y) {
if (id < 1 || id > N - 1)
return false;
if (x < 0 || y < 0 || x > K - M || y > K - M)
return false;
if (used[id] == true)
return false;
boolean isMatch = false;
for (int k = 0; k < 4 && !isMatch; k++) {
for (int i = 1; i <= M - 2; i++) {
int nx = x + dx[k] * i;
int ny = y + dy[k] * i;
if (nx < 0 || ny < 0 || nx > K - M || ny > K - M)
break;
if (scrapIdx[ny][nx] != -1) {
isMatch = true;
break;
}
}
}
if (!isMatch)
return false;
for (int i = 0; i < M; i++) {
for (int j = 0; j < M; j++) {
if (ret[y + i][x + j] != 0 && ret[y + i][x + j] != scrap[id][i][j])
return false;
}
}
for (int i = 0; i < M; i++) {
for (int j = 0; j < M; j++) {
ret[y + i][x + j] = scrap[id][i][j];
}
}
scrapIdx[y][x] = id;
used[id] = true;
return true;
}
private static void makePicture(int size, int seed) {
mSeed = seed;
for (int i = 0; i < size; i++)
for (int j = 0; j < size; j++)
mergedPicture[i][j] = (char) (pseudo_rand() % 15 + 1);
}
private static int run() {
flag = sc.nextInt();
N = sc.nextInt();
K = sc.nextInt();
M = sc.nextInt();
if (flag == 1) {
for (int i = 0; i < K; i++) {
for (int j = 0; j < K; j++) {
mergedPicture[i][j] = (char) sc.nextInt();
}
}
} else {
seed = sc.nextInt();
makePicture(K, seed);
}
for (int i = 0; i < MAXN; i++)
used[i] = false;
for (int i = 0; i < MAX_PICTURE_SIZE; i++) {
for (int j = 0; j < MAX_PICTURE_SIZE; j++) {
ret[i][j] = 0;
scrapIdx[i][j] = -1;
}
}
int y, x;
for (int i = 0; i < N; i++) {
y = sc.nextInt();
x = sc.nextInt();
for (int j = 0; j < M; j++)
for (int k = 0; k < M; k++)
scrap[i][j][k] = mergedPicture[y + j][x + k];
}
scrapIdx[0][0] = 0;
for (int i = 0; i < M; i++) {
for (int j = 0; j < M; j++) {
ret[i][j] = mergedPicture[i][j];
}
}
usersolution.mergePictures(N, M, K, scrap);
for (int i = 0; i < K; i++)
for (int j = 0; j < K; j++)
if (ret[i][j] != mergedPicture[i][j])
return FAIL;
return PASS;
}
public static void main(String[] args) throws Exception {
System.setIn(new java.io.FileInputStream("C:/Users/hoang.dung2/workspace/SW PRO/src/H2004/input.txt"));
sc = new Scanner(System.in);
int TC = sc.nextInt();
PASS = sc.nextInt();
for (int tc = 1; tc <= TC; tc++) {
System.out.println("#" + tc + " " + run());
}
sc.close();
}
}Editor is loading...
Leave a Comment