답안 #704300

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
704300 2023-03-02T03:15:42 Z uylulu Park (JOI17_park) C++14
20 / 100
220 ms 688 KB
#include "park.h"
#include<bits/stdc++.h>

using namespace std;

const int N = 2000;

static int adj[1400];

int n;

vector<pair<int,int>> res;

int help(int a,int b) {
	if(a > b) swap(a,b);

	return Ask(a,b,adj);
}

void sub1() {
	for(int i = 0;i < n;i++) {
		for(int j = i + 1;j < n;j++) {
			adj[i] = 1;
			adj[j] = 1;
			if(help(i,j)) {
				res.push_back({i,j});
			}
			adj[i] = 0;
			adj[j] = 0;
		}
	}
	for(auto u : res) {
		Answer(u.first,u.second);
	}
}

int kq[N + 1];

mt19937 rnd(time(0));

void process(vector<int> curr,int base) {
	kq[base] = curr[0];
	kq[base + (int)curr.size() - 1] = curr.back();

	if(curr.size() <= 3) {
		for(int i = 0;i < curr.size();i++) {
			kq[i + base] = curr[i];
		}
		return;
	}

	int idx = rnd() % ((int)curr.size() - 2);
	int val = curr[idx + 1];

	for(int i = 0;i < n;i++) {
		adj[i] = true;
	}

	vector<int> le,ri;
	le.push_back(curr[0]);
	ri.push_back(val);

	for(int i = 1;i < curr.size() - 1;i++) {
		if(curr[i] == val) continue;

		adj[curr[i]] = false;
		if(help(curr[0],val)) {
			ri.push_back(curr[i]);
		} else {
			le.push_back(curr[i]);
		}
		adj[curr[i]] = true;
	}
	le.push_back(val);
	ri.push_back(curr.back());

	process(le,base);
	process(ri,base + (int)le.size() - 1);
}

int my(int i) {
	return rnd() % i;
}

void ans(int a,int b) {
	if(a > b) swap(a,b);
	Answer(a,b);
}

void sub2() {

	vector<int> asd;
	for(int i = 1;i < n;i++) {
		asd.push_back(i);
	}
	random_shuffle(asd.begin(),asd.end(),my);

	asd.push_back(n - 1);
	reverse(asd.begin(),asd.end());
	asd.push_back(0);
	reverse(asd.begin(),asd.end());

	process(asd,0);

	for(int i = 1;i < n;i++) {

		ans(kq[i],kq[i - 1]);
	}
}

void Detect(int T, int N) {
	n = N;

	if(T == 1) {
		sub1();
		return;
	}
	if(T == 2) {
		sub2();
		return;
	}
}

Compilation message

park.cpp: In function 'void process(std::vector<int>, int)':
park.cpp:46:19: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   46 |   for(int i = 0;i < curr.size();i++) {
      |                 ~~^~~~~~~~~~~~~
park.cpp:63:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   63 |  for(int i = 1;i < curr.size() - 1;i++) {
      |                ~~^~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 7 ms 312 KB Output is correct
3 Correct 7 ms 348 KB Output is correct
4 Correct 8 ms 324 KB Output is correct
5 Correct 7 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 167 ms 596 KB Output is correct
2 Correct 107 ms 568 KB Output is correct
3 Correct 93 ms 540 KB Output is correct
4 Correct 199 ms 652 KB Output is correct
5 Correct 220 ms 688 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 340 KB Wrong Answer[6]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 340 KB Wrong Answer[6]
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 1 ms 340 KB Wrong Answer[6]
2 Halted 0 ms 0 KB -