Submission #519341

#TimeUsernameProblemLanguageResultExecution timeMemory
519341KoDSob (COCI19_sob)C++17
29 / 110
47 ms8016 KiB
#include <bits/stdc++.h> using std::vector; using std::array; using std::pair; using std::tuple; int main() { std::ios_base::sync_with_stdio(false); std::cin.tie(nullptr); int N, M; std::cin >> N >> M; vector<pair<int, int>> ans; vector<int> X(N), Y(N); std::iota(X.begin(), X.end(), 0); std::iota(Y.begin(), Y.end(), M); while (N > 0) { int L = 1; while (L < N) { L <<= 1; } const int m = M & (L - 1); if (m + N <= L) { const int len = N - m; for (int i = 0; i < len; ++i) { ans.emplace_back(X[i + m], Y[i]); } N -= len; M = m + len; X.erase(X.end() - len, X.end()); Y.erase(Y.begin(), Y.begin() + len); } else { const int H = L / 2; for (int i = N - H; i < N; ++i) { if (m + i >= L) { ans.emplace_back(X[m + i - L], Y[i]); } else { ans.emplace_back(X[i - H], Y[i]); } } X.erase(X.begin(), X.begin() + H); Y.erase(Y.end() - H, Y.end()); N -= H; M = m - H; } } for (const auto& [x, y] : ans) { assert((x & y) == x); std::cout << x << ' ' << y << '\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...