Submission #846604

#TimeUsernameProblemLanguageResultExecution timeMemory
846604serifefedartarKonstrukcija (COCI20_konstrukcija)C++17
110 / 110
1 ms460 KiB
#include <bits/stdc++.h> using namespace std; #define fast ios::sync_with_stdio(0);cin.tie(0); #define s second #define f first typedef long long ll; const ll MOD = 998244353; const ll LOGN = 20; const ll MAXN = 3e5 + 5; ll now = 0; int N = 1; vector<int> curr; vector<pair<int,int>> edges; void addEdge(int cnt) { vector<int> new_nodes; for (int i = N+1; i <= N+cnt; i++) new_nodes.push_back(i); N += cnt; for (auto from : curr) { for (auto to : new_nodes) edges.push_back({from, to}); } curr = new_nodes; } void addNode() { N++; edges.push_back({1, N}); curr.push_back(N); } int main() { fast ll K; cin >> K; bool flip = K < 0; curr.push_back(1); if (flip) addEdge(2); K = abs(K); addEdge(1); for (ll i = 60; i >= 0; i--) { if ((1ll<<i) & K) { addEdge(2); addNode(); if (i == 0) addEdge(2); else addEdge(3); } else if (i != 0) { addEdge(3); addEdge(2); } } if (flip) addEdge(1); else { addEdge(2); addEdge(1); } cout << N << " " << edges.size() << "\n"; for (auto u : edges) cout << u.f << " " << u.s << "\n"; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...