Submission #1273798

#TimeUsernameProblemLanguageResultExecution timeMemory
1273798TakeMeZagonetka (COI18_zagonetka)C++20
0 / 100
26 ms432 KiB
#include <iostream> #include <vector> #include <numeric> #include <algorithm> #include <queue> // Testing void print_permutation(const std::vector<int>& p, int n) { for (int i = 1; i <= n; ++i) { std::cout << p[i] << (i == n ? "" : " "); } std::cout << std::endl; } int main() { // Fast I/O std::ios_base::sync_with_stdio(false); std::cin.tie(NULL); int n; std::cin >> n; std::vector<int> p(n + 1); for (int i = 1; i <= n; ++i) { std::cin >> p[i]; } std::vector<std::vector<bool>> adj(n + 1, std::vector<bool>(n + 1, false)); for (int i = 1; i <= n; ++i) { for (int j = i + 1; j <= n; ++j) { std::vector<int> q = p; std::swap(q[i], q[j]); std::cout << "query "; print_permutation(q, n); int response; std::cin >> response; if (response == 0) { if (p[i] < p[j]) { adj[i][j] = true; } else { adj[j][i] = true; } } } } for (int k = 1; k <= n; ++k) { for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { if (adj[i][k] && adj[k][j]) { adj[i][j] = true; } } } } std::vector<int> a(n + 1); std::vector<int> in_degree(n + 1, 0); for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { if (adj[i][j]) { in_degree[j]++; } } } std::priority_queue<int, std::vector<int>, std::greater<int>> pq_a; for (int i = 1; i <= n; ++i) { if (in_degree[i] == 0) { pq_a.push(i); } } int current_val = 1; while (!pq_a.empty()) { int u = pq_a.top(); pq_a.pop(); a[u] = current_val++; for (int v = 1; v <= n; ++v) { if (adj[u][v]) { in_degree[v]--; if (in_degree[v] == 0) { pq_a.push(v); } } } } std::vector<int> b(n + 1); for (int i = 1; i <= n; ++i) { in_degree[i] = 0; } for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { if (adj[i][j]) { in_degree[j]++; } } } std::priority_queue<int> pq_b; for (int i = 1; i <= n; ++i) { if (in_degree[i] == 0) { pq_b.push(i); } } current_val = 1; while (!pq_b.empty()) { int u = pq_b.top(); pq_b.pop(); b[u] = current_val++; for (int v = 1; v <= n; ++v) { if (adj[u][v]) { in_degree[v]--; if (in_degree[v] == 0) { pq_b.push(v); } } } } std::cout << "end" << std::endl; print_permutation(a, n); print_permutation(b, n); return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...