Submission #1164662

#TimeUsernameProblemLanguageResultExecution timeMemory
1164662whoLibrary (JOI18_library)C++20
0 / 100
16 ms468 KiB
#include <bits/stdc++.h> #include <cstdio> #include <vector> #include "library.h" #define pb push_back using namespace std; template<class T> ostream& operator << (ostream& out, const vector<T>& v) { out << "{"; for (int i=0; i<v.size(); i++) { out << v[i]; if (i != v.size() - 1) out << ", "; } out << "}"; return out; } const int N = 1e3; int n; vector<int> adj[N+5]; int ask(const vector<int>& nodes) { if (nodes.empty()) return 0; vector<int> M(n, 0); for (int i : nodes) M[i-1] = 1; //cerr << nodes << ": " << M << endl; return Query(M); } int countEdges(int node, vector<int>& test) { int withoutNode = ask(test); test.pb(node); int withNode = ask(test); test.pop_back(); //cerr << withoutNode << ' ' << withNode << "..." << endl; return withoutNode - withNode + 1; } void createEdge(int x, vector<int> y, int edges) { if (edges == 0) return; //cerr << x << ' ' << y << ": " << edges << endl; if (y.empty()) return; if (y.size() == 1) { adj[x].pb(y.front()); adj[y.front()].pb(x); return; } int l=1, r=y.size(); int mid = (l+r) >> 1; vector<int> left(y.begin(), y.begin() + mid), right(y.begin() + mid, y.end()); int leftEdges = countEdges(x, left); if (leftEdges == 0) createEdge(x, right, edges); else { createEdge(x, left, leftEdges); if (edges - leftEdges) createEdge(x, right, edges - leftEdges); } } void Solve(int N) { n = N; //cerr << "..." << endl; for (int i=1; i<=n; i++) { vector<int> nodes; for (int j=i+1; j<=n; j++) nodes.pb(j); //cerr << countEdges(i, nodes) << "!!!" << endl; createEdge(i, nodes, countEdges(i, nodes)); } // for (int i=1; i<=n; i++) // { // for (int j : adj[i]) cerr << i << ' ' << j << "!" << endl; // } vector<bool> used(n+5, false); vector<int> res; for (int i=1; i<=n; i++) { if (adj[i].size() == 1) { while (res.size() < n) { res.pb(i); used[i] = true; for (int j : adj[i]) { if (used[j]) continue; i = j; break; } } break; } } for (int i : res) cerr << i << ' '; cerr << endl; Answer(res); }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...