Untitled

 avatar
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