제출 #1114164

#제출 시각아이디문제언어결과실행 시간메모리
1114164vjudge1Nice sequence (IZhO18_sequence)C++17
15 / 100
50 ms1896 KiB
#include <bits/stdc++.h> using i64 = long long; #ifdef DEBUG #include "/home/ahmetalp/Desktop/Workplace/debug.h" #else #define debug(...) void(23) #endif constexpr int INF = int(1E9) - 5; constexpr int C = 1000; void print(bool s, std::vector<int> x) { int n = int(x.size()); std::cout << n << '\n'; for (int i = 0; i < n; ++i) { std::cout << (s ? -1 : +1) * x[i] << " \n"[i == n - 1]; } } void solve() { int N, M; std::cin >> N >> M; bool swapped = false; if (N < M) { swapped = true; std::swap(N, M); } if (N % M == 0) { std::vector<int> p(N - 1); for (int i = 0; i < N - 1; ++i) { p[i] = 1; } print(swapped, p); } else { std::vector<std::vector<int>> adj; auto check = [&](int n) -> std::pair<bool, std::vector<int>> { adj.assign(n + 1, {}); std::vector<int> pre(n + 1), ans(n), ein(n + 1); for (int i = 0; i <= n; ++i) { if (i - N >= 0) { adj[i].emplace_back(i - N); ++ein[i - N]; } if (i + M <= n) { adj[i].emplace_back(i + M); ++ein[i + M]; } } std::queue<int> que; for (int i = 0; i <= n; ++i) { if (ein[i] == 0) { pre[i] = 1; que.emplace(i); } } while (!que.empty()) { int v = que.front(); que.pop(); for (auto u : adj[v]) { --ein[u]; pre[u] = std::max(pre[u], pre[v] + 1); if (ein[u] == 0) { que.emplace(u); } } } for (int i = n; i >= 0; --i) { if (pre[i] == 0) { return {false, {}}; } pre[i] -= pre[0]; } for (int i = 0; i < n; ++i) { ans[i] = pre[i + 1] - pre[i]; } return {true, ans}; }; int lo = 1, hi = N + M; while (lo < hi) { int mid = (lo + hi + 1) >> 1; if (check(mid).first) { lo = mid; } else { hi = mid - 1; } } print(swapped, check(lo).second); } return; } int main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int TT = 1; std::cin >> TT; for (int i = 1; i <= TT; ++i) { solve(); } 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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...