Submission #841805

# Submission time Handle Problem Language Result Execution time Memory
841805 2023-09-02T06:39:15 Z emuyumi Longest Trip (IOI23_longesttrip) C++17
5 / 100
11 ms 956 KB
#include "longesttrip.h"

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

vector<int> longest_trip(int N, int D) {

	int calls = 0;
	auto my_are_connected = [&](vector<int> a, vector<int> b) {
		calls ++;
		return are_connected(a, b);
	};

	bool found = 0;
	vector<int> answer;
	using vi = vector<int>;
	auto halves = [&](vector<int> v) -> pair<vi, vi> {
		int m = v.size() / 2;
		return {{v.begin(), v.begin()+m}, {v.begin()+m, v.end()}};
	};
	auto locate = [&](vector<int> src, vector<int> dest) -> int {
		while (src.size() != 1) {
			auto [a, b] = halves(src);
			if (my_are_connected(a, dest)) src = a;
			else src = b;
		}
		return src[0];
	};

	vector<int> path = {0};
	vector<int> left(N-1);
	vector<int> clique;
	iota(left.begin(), left.end(), 1);
	auto cleanClique = [&]() {
		int v = path.back();
		if (!clique.empty()) {
			if (my_are_connected(clique, {v})) {
				int b = locate(clique, {v});
				clique.erase(find(clique.begin(), clique.end(), b));
				path.push_back(b);
				for (int x : clique) path.push_back(x);
				clique.clear();
			}
		}
	};
	while (left.size()) {
		cleanClique();
		int v = path.back();
		while (!left.empty()) {
			int nxt = left.back(); left.pop_back();
			if (!my_are_connected({nxt}, {v})) {
				clique.push_back(nxt);
			}
			else {
				path.push_back(nxt);
				break;
			}
		}
		v = path.back();
	}
	cleanClique();

	if (!clique.empty()) {
		if (!my_are_connected(path, clique)) {
			if (path.size() > clique.size()) return path;
			else return clique;
		}
		int a = locate(path, clique);
		int b = locate(clique, {a});

		vector<int> ans = clique;
		ans.erase(find(ans.begin(), ans.end(), b));
		ans.push_back(b);
		int j = find(path.begin(), path.end(), a) - path.begin();
		if (j == 0) {
			for (int x : path) {
				ans.push_back(x);
			}
		}
		else {
			for (int i = j; i >= 0; --i) {
				ans.push_back(path[i]);
			}
			for (int i = path.size()-1; i > j; --i) {
				ans.push_back(path[i]);
			}
		}
	}
	return path;
}

Compilation message

longesttrip.cpp: In function 'std::vector<int> longest_trip(int, int)':
longesttrip.cpp:15:7: warning: unused variable 'found' [-Wunused-variable]
   15 |  bool found = 0;
      |       ^~~~~
# Verdict Execution time Memory Grader output
1 Incorrect 1 ms 344 KB Incorrect
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 344 KB Output is correct
2 Correct 4 ms 344 KB Output is correct
3 Correct 4 ms 344 KB Output is correct
4 Correct 4 ms 344 KB Output is correct
5 Correct 5 ms 344 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 5 ms 344 KB Output is correct
2 Correct 4 ms 344 KB Output is correct
3 Correct 5 ms 344 KB Output is correct
4 Correct 4 ms 344 KB Output is correct
5 Correct 4 ms 344 KB Output is correct
6 Incorrect 1 ms 344 KB Incorrect
7 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 5 ms 344 KB Output is correct
2 Correct 5 ms 344 KB Output is correct
3 Correct 5 ms 344 KB Output is correct
4 Correct 4 ms 344 KB Output is correct
5 Correct 4 ms 344 KB Output is correct
6 Correct 9 ms 344 KB Output is correct
7 Correct 7 ms 596 KB Output is correct
8 Correct 5 ms 344 KB Output is correct
9 Correct 4 ms 344 KB Output is correct
10 Correct 6 ms 344 KB Output is correct
11 Correct 5 ms 344 KB Output is correct
12 Correct 4 ms 600 KB Output is correct
13 Correct 5 ms 600 KB Output is correct
14 Correct 9 ms 344 KB Output is correct
15 Correct 9 ms 344 KB Output is correct
16 Correct 7 ms 344 KB Output is correct
17 Correct 6 ms 344 KB Output is correct
18 Correct 5 ms 344 KB Output is correct
19 Correct 5 ms 600 KB Output is correct
20 Correct 5 ms 436 KB Output is correct
21 Correct 5 ms 344 KB Output is correct
22 Correct 6 ms 600 KB Output is correct
23 Correct 5 ms 344 KB Output is correct
24 Correct 6 ms 852 KB Output is correct
25 Correct 7 ms 344 KB Output is correct
26 Correct 7 ms 344 KB Output is correct
27 Correct 6 ms 344 KB Output is correct
28 Correct 9 ms 344 KB Output is correct
29 Correct 7 ms 500 KB Output is correct
30 Correct 6 ms 344 KB Output is correct
31 Correct 8 ms 432 KB Output is correct
32 Correct 8 ms 432 KB Output is correct
33 Correct 5 ms 344 KB Output is correct
34 Correct 7 ms 344 KB Output is correct
35 Correct 7 ms 344 KB Output is correct
36 Correct 6 ms 600 KB Output is correct
37 Correct 9 ms 600 KB Output is correct
38 Correct 9 ms 600 KB Output is correct
39 Correct 11 ms 700 KB Output is correct
40 Correct 9 ms 956 KB Output is correct
41 Correct 11 ms 600 KB Output is correct
42 Correct 8 ms 696 KB Output is correct
43 Correct 9 ms 856 KB Output is correct
44 Correct 8 ms 444 KB Output is correct
45 Correct 11 ms 344 KB Output is correct
46 Correct 10 ms 344 KB Output is correct
47 Incorrect 1 ms 344 KB Incorrect
48 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 7 ms 344 KB Output is correct
2 Correct 5 ms 344 KB Output is correct
3 Correct 4 ms 344 KB Output is correct
4 Correct 4 ms 344 KB Output is correct
5 Correct 5 ms 600 KB Output is correct
6 Incorrect 0 ms 344 KB Incorrect
7 Halted 0 ms 0 KB -