제출 #1351193

#제출 시각아이디문제언어결과실행 시간메모리
1351193pandaa73Casino (JOI26_casino)C++20
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
using namespace std;

#define ff endl
#define lf "\n"
#define fi first
#define se second
#define _ << ' ' <<
#define all(x) begin(x),end(x)
#define rall(x) rbegin(x),rend(x)

#ifdef DEBUG

constexpr bool IS_DEBUG = 1;

#define infor(fmt, ...) do { print(stderr, fmt, ##__VA_ARGS__); } while(0)
#define infof(fmt, ...) do { println(stderr, fmt, ##__VA_ARGS__); } while(0)

#else

constexpr bool IS_DEBUG = 0;

#define infor(fmt, ...)
#define infof(fmt, ...)

#endif

using ll = long long;

using pll = pair<ll, ll>;
using pii = pair<int, int>;

constexpr int LOG = 20;
constexpr int MOD = 1e9+7;
constexpr int MAXN = 8;

mt19937 timmy_loves_gambling(73);

const vector<vector<int>> SEN = {
    {0, 1, 1, 1, 1, 1, 1, 1},
    {0, 0, 0, 0, 0, 0, 0, 1},
    {0, 0, 0, 0, 0, 0, 0, 1},
    {0, 0, 0, 0, 0, 0, 0, 1},
    {0, 0, 0, 0, 0, 0, 0, 1},
    {0, 0, 0, 0, 0, 0, 0, 1},
    {0, 0, 0, 0, 0, 0, 0, 1},
    {0, 0, 0, 0, 0, 0, 0, 0}
};

void next(int &i, int &j) {
    j += 1;
    if(j == MAXN) {
        j = 0;
        i += 1;

        if(i == MAXN) i = 0;
    }
}

vector<vector<int>> Azzurro(int N, int L, string S) {
    vector G(N, vector<int>(N));

    int x = 0, y = 0;
    for(int i = 0; i < L; ++i, next(x, y)) {
        while(SEN[x][y]) next(x, y);

        G[x][y] = S[i] - 'A';
    }

    for(int i = 1; i <= 13; ++i) {
        x = max(0, i - N + 1), y = i - x;

        for(int r = x, c = y; 0 <= min(r, c) && max(r, c) < N;
                r += 2, c -= 2) {
            G[x][y] ^= G[r][c];
        }
    }

    return G;
}

string Bordeaux(int N, int L, vector<vector<int>> T) {
    vector pass(N + 1, vector<int>(N + 1));
    for(int i = 1; i <= 13; ++i) {
        int x = max(0, i - N + 1), y = i - x;

        int v = 0;
        for(int r = x, c = y; 0 <= min(r, c) && max(r, c) < N;
                r += 2, c -= 2) {
            v ^= T[r][c];
        }

        for(int r = x, c = y; 0 <= min(r, c) && max(r, c) < N; ++r, c--) {
            pass[r][c] = v;
            v ^= 1;
        }
    }

    pass[0][0] = pass[N - 1][N - 1] = 1;

    int x = 0, y = 0;
    while(x != N - 1 || y != N - 1) {
        T[x][y] ^= 1;

        (pass[x + 1][y] ? x : y) += 1;
    }

    T[x][y] ^= 1;

    string S(L, 'A');

    x = 0, y = 0;
    for(int i = 0; i < L; ++i, next(x, y)) {
        while(SEN[x][y]) next(x, y);

        S[i] += T[x][y];
    }

    return S;
}

#ifdef LOCAL
enum {
    INVALID_X = 1,
    INVALID_S = 2,
};

namespace {

void WrongAnswer(int code) {
  printf("Wrong Answer [%d]\n", code);
  exit(0);
}

int Q, N;
std::vector<int> L;
std::vector<std::string> S, R;
std::vector<std::vector<int>> X, T;

}

std::vector<std::vector<int>> Chiaro(int N, std::vector<std::vector<int>> X, std::string R){
    std::vector<std::vector<int>> res = X;
    int posX = 0, posY = 0;
    if (res[0][0] == 0) {
        res[0][0] = 1;
    }
    else {
        res[0][0] = 0;
    }
    for(int i = 0; i < 2 * N - 2; i++){
        if (R[i] == 'D') {
            posX++;
        }
        else {
            posY++;
        }
        if (res[posX][posY] == 0) {
            res[posX][posY] = 1;
        }
        else {
            res[posX][posY] = 0;
        }
    }
    return res;
}

int main(int argc, char **argv) {
	if (scanf("%d", &Q) != 1) {
		fprintf(stderr, "Error while reading input\n");
		exit(1);
	}
    if (scanf("%d", &N) != 1) {
		fprintf(stderr, "Error while reading input\n");
		exit(1);
	}

    L = std::vector<int>(Q + 1, 0);
    S = std::vector<std::string>(Q + 1, "");
    R = std::vector<std::string>(Q + 1, "");

    for (int turn = 1; turn <= Q; turn++) {
        S[turn] = "";
        R[turn] = "";
        if (scanf("%d", &L[turn]) != 1) {
            fprintf(stderr, "Error while reading input\n");
            exit(1);
        }
        char tmp;
		if (scanf("%c", &tmp) != 1) {
			fprintf(stderr, "Error while reading input\n");
			exit(1);
		}
		for (int i = 0; i < L[turn]; i++) {
			if (scanf("%c", &tmp) != 1) {
				fprintf(stderr, "Error while reading input\n");
				exit(1);
			}
			if (tmp != 'A' && tmp != 'B') {
				fprintf(stderr, "Error: A character in S is neither A nor B");
                exit(1);
			}
			S[turn] += tmp;
		}
        if (scanf("%c", &tmp) != 1) {
			fprintf(stderr, "Error while reading input\n");
			exit(1);
		}
        int Count = 0;
		for (int i = 0; i < 2 * (N - 1); i++) {
			if (scanf("%c", &tmp) != 1) {
				fprintf(stderr, "Error while reading input\n");
				exit(1);
			}
			if (tmp != 'D' && tmp != 'R') {
				fprintf(stderr, "Error: A character in R is neither D nor R");
                exit(1);
			}
            if (tmp == 'D') Count++;
			R[turn] += tmp;
		}
        if (Count != N - 1) {
            fprintf(stderr, "Error: The number of D is not N - 1");
            exit(1);
        }
    }

	int Score = 51;

	for (int turn = 1; turn <= Q; turn++) {
		X = Azzurro(N, L[turn], S[turn]);
        if (X.size() != N) {
            WrongAnswer(INVALID_X);
        }
        for (int i = 0; i < N; i++) {
            if (X[i].size() != N) {
                WrongAnswer(INVALID_X);
            }
            for (int j = 0; j < N; j++) {
                if (X[i][j] != 0 && X[i][j] != 1) {
                    WrongAnswer(INVALID_X);
                }
            }
        }
        T = Chiaro(N, X, R[turn]);
		std::string Answer = Bordeaux(N, L[turn], T);
		if ((int)Answer.size() != L[turn]) {
            WrongAnswer(INVALID_S);
        }
		for (int i = 0; i < (int)Answer.size(); i++) {
			if (Answer[i] != 'A' && Answer[i] != 'B') {
                WrongAnswer(INVALID_S);
            }
		}
		if (Answer != S[turn]) {
			Score = std::min(Score, L[turn] - 1);
		}
	}

	printf("Accepted: %d\n", Score);
	return 0;
}
#endif
// source code

컴파일 시 표준 에러 (stderr) 메시지

# 2번째 컴파일 단계

/usr/bin/ld: /tmp/cckuawM9.o: in function `main':
grader_bordeaux.cpp:(.text.startup+0x328): undefined reference to `Bordeaux[abi:cxx11](int, int, std::vector<std::vector<int, std::allocator<int> >, std::allocator<std::vector<int, std::allocator<int> > > >)'
collect2: error: ld returned 1 exit status