Untitled
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