Untitled

mail@pastecode.io avatarunknown
plain_text
22 days ago
4.7 kB
6
Indexable
Never
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif

#include <stdio.h>

#define MAX_MAP_SIZE		(500)
#define MAX_PIC_SIZE		(8)

#define CMD_INIT			(100)
#define CMD_FINDPOSITION	(200)
#define CMD_UPDATEMAP		(300)

struct RESULT
{
	int r, c;
};

extern void init(int N, int M, int mMap[MAX_MAP_SIZE][MAX_MAP_SIZE]);
extern RESULT findPosition(int mPic[MAX_PIC_SIZE][MAX_PIC_SIZE]);
extern void updateMap(int r, int c, int mNewValue);

/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////

static int mSeed;

static int pseudo_rand(void)
{
	mSeed = mSeed * 214013 + 2531011;
	return (mSeed >> 16) & 0x7FFF;
}

static int oMap[MAX_MAP_SIZE][MAX_MAP_SIZE];

static void makeMap(int N, int seed, int mMap[MAX_MAP_SIZE][MAX_MAP_SIZE])
{
	mSeed = seed;

	for (int i = 0; i < N; ++i)
	for (int j = 0; j < N; ++j)
		mMap[i][j] = (pseudo_rand() % 32768) - 16384;
}

static RESULT makePic(int seed, int N, int M, int mPic[MAX_PIC_SIZE][MAX_PIC_SIZE])
{
	static int org[MAX_PIC_SIZE][MAX_PIC_SIZE];
	
	mSeed = seed;
	
	int r = pseudo_rand() % (N - M + 1);
	int c = pseudo_rand() % (N - M + 1);
	int dir = pseudo_rand() % 4;

	for (int dr = 0; dr < M; ++dr)
	for (int dc = 0; dc < M; ++dc)
	{
		org[dr][dc] = oMap[r + dr][c + dc] + (pseudo_rand() % 256) - 128;

		if (org[dr][dc] < -16384) org[dr][dc] = -16384;
		if (org[dr][dc] >  16383) org[dr][dc] =  16383;
	}

	if (dir == 0)
	{
		for (int dr = 0; dr < M; ++dr)
		for (int dc = 0; dc < M; ++dc)
			mPic[dr][dc] = org[dr][dc];
	}
	else if (dir == 1)
	{
		for (int dr = 0; dr < M; ++dr)
		for (int dc = 0; dc < M; ++dc)
			mPic[dr][dc] = org[M - 1 - dc][dr];
	}
	else if (dir == 2)
	{
		for (int dr = 0; dr < M; ++dr)
		for (int dc = 0; dc < M; ++dc)
			mPic[dr][dc] = org[M - 1 - dr][M - 1 - dc];
	}
	else
	{
		for (int dr = 0; dr < M; ++dr)
		for (int dc = 0; dc < M; ++dc)
			mPic[dr][dc] = org[dc][M - 1 - dr];
	}
	
	RESULT ret;
	
	ret.r = r; ret.c = c;
	
	return ret;
}

static bool run()
{
	static int mMap[MAX_MAP_SIZE][MAX_MAP_SIZE];
	static int mPic[MAX_PIC_SIZE][MAX_PIC_SIZE];
	
	int N, M, Q;
	int cmd, seed;
	int r, c;

	RESULT ans, ret;
	
	scanf("%d %d %d %d", &Q, &N, &M, &seed);

	bool okay = false;

	makeMap(N, seed, mMap);

	for (int i = 0; i < N; ++i)
	for (int j = 0; j < N; ++j)
		oMap[i][j] = mMap[i][j];
	
	for (int q = 0; q <= Q; ++q)
	{
		scanf("%d", &cmd);
		switch(cmd)
		{
		case CMD_INIT:
			init(N, M, mMap);
			okay = true;
			break;
		case CMD_FINDPOSITION:
			scanf("%d", &seed);
			ans = makePic(seed, N, M, mPic);
			if (okay)
			{
				ret = findPosition(mPic);
				if (ret.r != ans.r || ret.c != ans.c)
					okay = false;
			}
			break;
		case CMD_UPDATEMAP:
			scanf("%d", &mSeed);
			r = pseudo_rand() % N;
			c = pseudo_rand() % N;
			oMap[r][c] = (pseudo_rand() % 32768) - 16384;
			if (okay)
				updateMap(r, c, oMap[r][c]);
			break;
		default:
			okay = false;
			break;
		}
	}

	return okay;
}

int main()
{
	setbuf(stdout, NULL);
	//freopen("sample_input.txt", "r", stdin);

	int T, MARK;
	scanf("%d %d", &T, &MARK);

	for (int tc = 1; tc <= T; ++tc)
	{
		int score = run() ? MARK : 0;
		
		printf("#%d %d\n", tc, score);
	}
	return 0;
}



#define MAX_MAP_SIZE	(500)
#define MAX_PIC_SIZE	(8)

struct RESULT
{
	int r, c;
};

void init(int N, int M, int mMap[MAX_MAP_SIZE][MAX_MAP_SIZE])
{
	
}

RESULT findPosition(int mPic[MAX_PIC_SIZE][MAX_PIC_SIZE])
{
	RESULT ret;
	
	ret.r = ret.c = -1;

	return ret;
}

void updateMap(int r, int c, int mNewValue)
{

}


25 100
11 10 4 0
100
200 21767
200 10640
200 2418
200 12084
300 24394
200 29728
200 21419
200 16054
200 28535
200 5895
200 18434
22 20 4 7161
100
200 9690
200 1758
300 17834
200 17846
200 12328
200 30014
300 32035
200 3492
200 13452
200 27967
200 13227
200 10564
200 16783
200 7587
200 9056
200 29325
200 10929
200 18072
200 20487
200 12854
200 17686
200 16701
110 30 4 4253
100
200 18208
200 8578
200 23957
300 18371
200 29253
200 21089
300 18929
200 21702
300 21632
200 20359
200 16352
200 26534
200 20646
200 17724
200 25902
200 29727
200 30662
200 6133
200 13978
200 15639
200 30661
300 15376
300 16461
200 9060
200 25120
200 16283
200 8964
200 27743
200 19349
200 13235
300 2154
200 28606
200 4979
200 31181
200 25741
200 10575
200 13411
200 13727
200 9187
200 30865
200 30281
200 21665
200 3187
200 14620
200 12430
200 4698
200 7116
200 4521
200 4786