Submission #704301

# Submission time Handle Problem Language Result Execution time Memory
704301 2023-03-02T03:16:04 Z vjudge1 Park (JOI17_park) C++17
20 / 100
201 ms 512 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++) {
      |                ~~^~~~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 6 ms 340 KB Output is correct
3 Correct 7 ms 468 KB Output is correct
4 Correct 6 ms 340 KB Output is correct
5 Correct 7 ms 340 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 163 ms 508 KB Output is correct
2 Correct 96 ms 496 KB Output is correct
3 Correct 82 ms 500 KB Output is correct
4 Correct 201 ms 512 KB Output is correct
5 Correct 177 ms 500 KB Output is correct
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 340 KB Wrong Answer[6]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 348 KB Wrong Answer[6]
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 340 KB Wrong Answer[6]
2 Halted 0 ms 0 KB -