# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
44568 | 2018-04-03T10:19:42 Z | ssnsarang2023 | Zagonetka (COI18_zagonetka) | C++17 | 2 ms | 436 KB |
#define debug #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef unsigned long long ull; typedef pair<int, int> ii; #define SZ(x) ((int)x.size()) int n, a[105], b[105], pos[105], deg[105], topo[105], n_topo; bool adj[105][105]; bool ask() { queue<int> q; fill(deg + 1, deg + n + 1, 0); for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { if (adj[i][j]) { ++deg[j]; } } } for (int i = 1; i <= n; ++i) { if (!deg[i]) { q.push(i); } } n_topo = 0; while (SZ(q)) { int u = q.front(); q.pop(); topo[++n_topo] = u; for (int v = 1; v <= n; ++v) { if (!adj[u][v]) continue; --deg[v]; if (!deg[v]) { q.push(v); } } } for (int i = 1; i <= n; ++i) { if (deg[i]) { return 0; } b[topo[i]] = i; } printf("query "); for (int i = 1; i <= n; ++i) { printf("%d", b[i]); if (i < n) { printf(" "); } } fflush(stdout); int re = 0; scanf("%d", &re); return re; } int main() { scanf("%d", &n); for (int i = 1; i <= n; ++i) { scanf("%d", &a[i]); pos[a[i]] = i; for (int j = 1; j < i; ++j) { bool re = a[j] < a[i]; if (re) { adj[j][i] = 1; } else { adj[i][j] = 1; } } } for (int i = 1; i < n; ++i) { for (int j = 1; j <= n - i; ++j) { int x = pos[j], y = pos[j + i]; adj[x][y] = 0, adj[y][x] = 1; bool re = ask(); adj[y][x] = 0, adj[x][y] = !re; } } set<int> q; fill(deg + 1, deg + n + 1, 0); for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { if (adj[i][j]) { ++deg[j]; } } } for (int i = 1; i <= n; ++i) { if (!deg[i]) { q.insert(i); } } int idx = 1; while (SZ(q)) { int u = *q.begin(); q.erase(q.begin()); a[u] = idx++; for (int v = 1; v <= n; ++v) { if (!adj[u][v]) continue; --deg[v]; if (!deg[v]) { q.insert(v); } } } fill(deg + 1, deg + n + 1, 0); for (int i = 1; i <= n; ++i) { for (int j = i + 1; j <= n; ++j) { swap(adj[i][j], adj[j][i]); } } for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { if (adj[i][j]) { ++deg[j]; } } } for (int i = 1; i <= n; ++i) { if (!deg[i]) { q.insert(i); } } idx = n; while (SZ(q)) { int u = *q.begin(); q.erase(q.begin()); b[u] = idx--; for (int v = 1; v <= n; ++v) { if (!adj[u][v]) continue; --deg[v]; if (!deg[v]) { q.insert(v); } } } printf("end\n"); for (int i = 1; i <= n; ++i) { printf("%d", a[i]); if (i < n) { printf(" "); } } printf("\n"); for (int i = 1; i <= n; ++i) { printf("%d", b[i]); if (i < n) { printf(" "); } } fflush(stdout); return 0; }
Compilation message
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Execution timed out | 2 ms | 248 KB | Time limit exceeded (wall clock) |
2 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Execution timed out | 2 ms | 436 KB | Time limit exceeded (wall clock) |
2 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Execution timed out | 2 ms | 436 KB | Time limit exceeded (wall clock) |
2 | Halted | 0 ms | 0 KB | - |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
1 | Execution timed out | 2 ms | 436 KB | Time limit exceeded (wall clock) |
2 | Halted | 0 ms | 0 KB | - |