Submission #238734

#TimeUsernameProblemLanguageResultExecution timeMemory
238734SamAndKonstrukcija (COCI20_konstrukcija)C++17
110 / 110
7 ms640 KiB
#include <bits/stdc++.h> using namespace std; #define m_p make_pair #define all(x) (x).begin(),(x).end() #define sz(x) ((int)(x).size()) #define fi first #define se second typedef long long ll; mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count()); mt19937 rnf(2106); const int N = 1003; struct stg0 { int n, m; vector<int> a[N]; vector<int> v; bool cc[N]; void dfs1(int x) { cc[x] = true; v.push_back(x); for (int i = 0; i < a[x].size(); ++i) { int h = a[x][i]; if (!cc[h]) dfs1(h); } } bool c[N]; int k[N], z[N]; void dfs(int x) { c[x] = true; if (x == n) { k[x] = 1; return; } v.clear(); memset(cc, 0, sizeof cc); dfs1(x); vector<int> yv = v; for (int i = 0; i < yv.size(); ++i) { int h = yv[i]; if (h == x) continue; if (!c[h]) dfs(h); z[x] += k[h]; k[x] += z[h]; } printf("%d %d\n", x, k[x] - z[x]); } void por() { /*scanf("%d", &n); int x, y; while (scanf("%d%d", &x, &y) != EOF) { a[x].push_back(y); }*/ scanf("%d%d", &n, &m); while (m--) { int x, y; scanf("%d%d", &x, &y); a[x].push_back(y); } dfs(1); printf("%d\n", k[1] - z[1]); } }; int n; vector<pair<int, int> > ans; ll k; vector<int> v; void ave(int x) { k *= -(x - 1); vector<int> u; for (int i = 0; i < x; ++i) u.push_back(--n); for (int i1 = 0; i1 < v.size(); ++i1) { for (int i2 = 0; i2 < u.size(); ++i2) { ans.push_back(m_p(u[i2], v[i1])); } } v = u; } void solv() { scanf("%lld", &k); if (k == 0) { printf("6 6\n"); printf("1 4\n"); printf("1 5\n"); printf("4 3\n"); printf("5 3\n"); printf("3 2\n"); printf("2 6\n"); return; } bool z = false; if (k < 0) { z = true; k *= -1; } vector<int> bk; while (k) { bk.push_back(k % 2); k /= 2; } reverse(all(bk)); k = 1; n = 1001; v.push_back(--n); ave(2); for (int i = 1; i < bk.size(); ++i) { ave(3); if (bk[i]) { if (k > 0) ave(2); v.push_back(--n); ans.push_back(m_p(v.back(), 1000)); --k; } } if ((k > 0 && !z) || (k < 0 && z)) ave(2); for (int i = 0; i < v.size(); ++i) ans.push_back(m_p(1, v[i])); printf("%d %d\n", 1000, ans.size()); for (int i = 0; i < ans.size(); ++i) printf("%d %d\n", ans[i].fi, ans[i].se); } int main() { #ifdef SOMETHING freopen("input.txt", "r", stdin); //freopen("output.txt", "w", stdout); #endif // SOMETHING //ios_base::sync_with_stdio(false), cin.tie(0); //stg0().por(); //return 0; solv(); return 0; } //while ((double)clock() / CLOCKS_PER_SEC <= 0.9){}

Compilation message (stderr)

konstrukcija.cpp: In member function 'void stg0::dfs1(int)':
konstrukcija.cpp:24:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int i = 0; i < a[x].size(); ++i)
                         ~~^~~~~~~~~~~~~
konstrukcija.cpp: In member function 'void stg0::dfs(int)':
konstrukcija.cpp:46:27: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int i = 0; i < yv.size(); ++i)
                         ~~^~~~~~~~~~~
konstrukcija.cpp: In function 'void ave(int)':
konstrukcija.cpp:92:25: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i1 = 0; i1 < v.size(); ++i1)
                      ~~~^~~~~~~~~~
konstrukcija.cpp:94:29: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (int i2 = 0; i2 < u.size(); ++i2)
                          ~~~^~~~~~~~~~
konstrukcija.cpp: In function 'void solv()':
konstrukcija.cpp:133:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 1; i < bk.size(); ++i)
                     ~~^~~~~~~~~~~
konstrukcija.cpp:147:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < v.size(); ++i)
                     ~~^~~~~~~~~~
konstrukcija.cpp:149:39: warning: format '%d' expects argument of type 'int', but argument 3 has type 'std::vector<std::pair<int, int> >::size_type {aka long unsigned int}' [-Wformat=]
     printf("%d %d\n", 1000, ans.size());
                             ~~~~~~~~~~^
konstrukcija.cpp:150:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < ans.size(); ++i)
                     ~~^~~~~~~~~~~~
konstrukcija.cpp:104:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%lld", &k);
     ~~~~~^~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...