Untitled
unknown
plain_text
a year ago
3.7 kB
7
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