답안 #125400

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
125400 2019-07-05T08:12:26 Z 이온조(#3059) Park (JOI17_park) C++14
10 / 100
702 ms 760 KB
#include "park.h"
#include <bits/stdc++.h>
using namespace std;

static int N, P[1444], O[1444];

void answer(int u, int v) {
	if(u > v) swap(u, v);
	// printf("answer: %d %d\n", u, v);
	Answer(u, v);
}

int ask(int A, int B, int p[]) {
	if(A > B) swap(A, B);
	// printf("A: %d, B: %d\n", A, B);
	// printf("PLACE: ");
	// for(int i=0; i<N; i++) printf("%d", p[i]);
	// printf("\n result: ");
	int tmp = Ask(A, B, p);
	// printf("%d\n", tmp);
	return tmp;
}

void go(vector<int> &S, int id) {
	int K = S.size();
	if(K == 0) return;
	int x = S[rand() % K];

	if(K == 1) {
		O[id] = S[0];
		return;
	}

	P[x] = 0;
	vector<int> L, R;
	for(auto& it: S) {
		if(it == x) continue;
		if(ask(0, it, P)) L.push_back(it);
		else R.push_back(it);
	}
	O[id + L.size()] = x;
	P[x] = 1;

	go(L, id);
	go(R, id + L.size() + 1);
}

void Detect(int T, int N) {
	srand(190705);
	::N = N;
	vector<int> S;
	for(int i=1; i<N-1; i++) S.push_back(i);
	for(int i=0; i<N; i++) P[i] = 1;
	go(S, 1); O[0] = 0; O[N-1] = N-1;
	for(int i=1; i<N; i++) answer(O[i-1], O[i]);
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 3 ms 376 KB Wrong Answer[2]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 157 ms 632 KB Output is correct
2 Correct 107 ms 504 KB Output is correct
3 Correct 120 ms 504 KB Output is correct
4 Correct 153 ms 552 KB Output is correct
5 Correct 162 ms 544 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 493 ms 760 KB Wrong Answer[5]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 341 ms 644 KB Wrong Answer[5]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 702 ms 732 KB Wrong Answer[5]
2 Halted 0 ms 0 KB -