제출 #1198148

#제출 시각아이디문제언어결과실행 시간메모리
1198148NDT134Coreputer (IOI23_coreputer)C++20
컴파일 에러
0 ms0 KiB
#include "coreputer.h"

#include <cassert>
#include <cstdio>
#include <string>
#include <vector>
#include<iostream>

static constexpr int maxDiagnostics = 32;
static int diagnostic_counter = 0;
static int malfunctioningCores = 0;

static int N;
static std::vector<int> M;

static inline void protocol_violation(std::string message) {
	printf("Protocol Violation: %s\n", message.c_str());
	exit(0);
}

int run_diagnostic(std::vector<int> T) {
	++diagnostic_counter;
	if (diagnostic_counter > maxDiagnostics) {
		protocol_violation("too many calls");
	}

	int l = T.size();
	if (l > N) {
		protocol_violation("invalid array");
	}

	for (int i = 0; i < l; ++i) {
		if (T[i] < 0 || T[i] >= N) {
			protocol_violation("invalid array");
		}
		for (int j = 0; j < i; ++j) {
			if (T[i] == T[j]) {
				protocol_violation("invalid array");
			}
		}
	}

	int malfunctioningTaggedCores = 0;
    for (int i : T) {
        if (M[i] == 1) malfunctioningTaggedCores++;
    }

    int malfunctioningUntaggedCores = malfunctioningCores - malfunctioningTaggedCores;
    if (malfunctioningTaggedCores > malfunctioningUntaggedCores) {
        return 1;
    }
    if (malfunctioningTaggedCores == malfunctioningUntaggedCores) {
        return 0;
    }
    return -1;
}

using namespace std;
int main() {
	//assert(1 == scanf("%d", &N));
	cin >> N;
	M.resize(N);
	for (int i = 0; i < N; ++i) {
		//assert(1 == scanf("%d", &M[i]));
		cin >> M[i];
		malfunctioningCores += M[i];
	}

	if (malfunctioningCores == 0) {
		//printf("No Malfunctioning Core\n");
		cout << "No Malfunctioning Core\n";
        exit(0);
	}

	std::vector<int> c = malfunctioning_cores(N);
	int n = c.size();
	for (int i = 0; i < n; ++i) {
		//printf(i == 0 ? "%d" : " %d", c[i]);
		cout << c[i] << " ";
	}
	//printf("\n");
	//printf("%d\n", diagnostic_counter);
	cout << "\n" << diagnostic_counter << "\n";
	return 0;
}

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

/usr/bin/ld: /tmp/ccwjku2c.o: in function `run_diagnostic(std::vector<int, std::allocator<int> >)':
stub.cpp:(.text+0xd0): multiple definition of `run_diagnostic(std::vector<int, std::allocator<int> >)'; /tmp/cc3CqAwg.o:coreputer.cpp:(.text+0x30): first defined here
/usr/bin/ld: /tmp/ccwjku2c.o: in function `main':
stub.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/cc3CqAwg.o:coreputer.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/cc3CqAwg.o: in function `main':
coreputer.cpp:(.text.startup+0xe2): undefined reference to `malfunctioning_cores(int)'
/usr/bin/ld: /tmp/ccwjku2c.o: in function `main':
stub.cpp:(.text.startup+0x4a): undefined reference to `malfunctioning_cores(int)'
collect2: error: ld returned 1 exit status