제출 #54446

#제출 시각아이디문제언어결과실행 시간메모리
54446egorlifarNice sequence (IZhO18_sequence)C++17
6 / 100
22 ms19488 KiB
/* ЗАПУСКАЕМ ░ГУСЯ░▄▀▀▀▄░РАБОТЯГУ░░ ▄███▀░◐░░░▌░░░░░░░ ░░░░▌░░░░░▐░░░░░░░ ░░░░▐░░░░░▐░░░░░░░ ░░░░▌░░░░░▐▄▄░░░░░ ░░░░▌░░░░▄▀▒▒▀▀▀▀▄ ░░░▐░░░░▐▒▒▒▒▒▒▒▒▀▀▄ ░░░▐░░░░▐▄▒▒▒▒▒▒▒▒▒▒▀▄ ░░░░▀▄░░░░▀▄▒▒▒▒▒▒▒▒▒▒▀▄ ░░░░░░▀▄▄▄▄▄█▄▄▄▄▄▄▄▄▄▄▄▀▄ ░░░░░░░░░░░▌▌░▌▌░░░░░ ░░░░░░░░░░░▌▌░▌▌░░░░░ ░░░░░░░░░▄▄▌▌▄▌▌░░░░░ */ #include <iostream> #include <complex> #include <vector> #include <string> #include <algorithm> #include <cstdio> #include <numeric> #include <cstring> #include <ctime> #include <cstdlib> #include <set> #include <map> #include <unordered_map> #include <unordered_set> #include <list> #include <cmath> #include <bitset> #include <cassert> #include <queue> #include <stack> #include <iomanip> #include <deque> using namespace std; template<typename T1, typename T2>inline void chkmin(T1 &x, T2 y) { if (x > y) x = y; } template<typename T1, typename T2>inline void chkmax(T1 &x, T2 y) { if (x < y) x = y; } template<typename T, typename U> inline ostream &operator<< (ostream &_out, const pair<T, U> &_p) { _out << _p.first << ' ' << _p.second; return _out; } template<typename T, typename U> inline istream &operator>> (istream &_in, pair<T, U> &_p) { _in >> _p.first >> _p.second; return _in; } template<typename T> inline ostream &operator<< (ostream &_out, const vector<T> &_v) { if (_v.empty()) { return _out; } _out << _v.front(); for (auto _it = ++_v.begin(); _it != _v.end(); ++_it) { _out << ' ' << *_it; } return _out; } template<typename T> inline istream &operator>> (istream &_in, vector<T> &_v) { for (auto &_i : _v) { _in >> _i; } return _in; } template<typename T> inline ostream &operator<< (ostream &_out, const set<T> &_s) { if (_s.empty()) { return _out; } _out << *_s.begin(); for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) { _out << ' ' << *_it; } return _out; } template<typename T> inline ostream &operator<< (ostream &_out, const multiset<T> &_s) { if (_s.empty()) { return _out; } _out << *_s.begin(); for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) { _out << ' ' << *_it; } return _out; } template<typename T> inline ostream &operator<< (ostream &_out, const unordered_set<T> &_s) { if (_s.empty()) { return _out; } _out << *_s.begin(); for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) { _out << ' ' << *_it; } return _out; } template<typename T> inline ostream &operator<< (ostream &_out, const unordered_multiset<T> &_s) { if (_s.empty()) { return _out; } _out << *_s.begin(); for (auto _it = ++_s.begin(); _it != _s.end(); ++_it) { _out << ' ' << *_it; } return _out; } template<typename T, typename U> inline ostream &operator<< (ostream &_out, const map<T, U> &_m) { if (_m.empty()) { return _out; } _out << '(' << _m.begin()->first << ": " << _m.begin()->second << ')'; for (auto _it = ++_m.begin(); _it != _m.end(); ++_it) { _out << ", (" << _it->first << ": " << _it->second << ')'; } return _out; } template<typename T, typename U> inline ostream &operator<< (ostream &_out, const unordered_map<T, U> &_m) { if (_m.empty()) { return _out; } _out << '(' << _m.begin()->first << ": " << _m.begin()->second << ')'; for (auto _it = ++_m.begin(); _it != _m.end(); ++_it) { _out << ", (" << _it->first << ": " << _it->second << ')'; } return _out; } #define sz(c) (int)(c).size() #define all(c) (c).begin(), (c).end() #define rall(c) (c).rbegin(), (c).rend() #define left left228 #define right right228 #define next next228 #define rank rank228 #define prev prev228 #define y1 y1228 #define read(FILENAME) freopen((FILENAME + ".in").c_str(), "r", stdin) #define write(FILENAME) freopen((FILENAME + ".out").c_str(), "w", stdout) #define files(FILENAME) read(FILENAME), write(FILENAME) #define pb push_back #define x first #define y second const string FILENAME = "input"; const int MAXN = 400001; vector<int> g[MAXN]; int used[MAXN]; bool bad = false; vector<int> rg[MAXN]; long long pref[MAXN]; void dfs(int u) { used[u] = 1; for (auto h: g[u]) { if (!used[h]) { dfs(h); } else if (used[h] == 1) { bad = true; } } used[u] = 2; } bool good(int len, int n, int m) { for (int i = 0; i <= len; i++) { g[i].clear(); used[i] = false; } bad = false; for (int i = 1; i <= len; i++) { if (i >= n) { g[i].pb(i - n); //i < i - n } if (i >= m) { g[i - m].pb(i); } } for (int i = 0; i <= len; i++) { if (!used[i]) { dfs(i); } } return !bad; } void solve(int n, int m) { if (n == m) { cout << n - 1 << '\n'; for (int i = 0; i < n - 1; i++) { cout << 1 << ' '; } cout << '\n'; return; } int l = 1; int r = max(n, m) * 2; while (l != r) { int mid = (l + r + 1) >> 1; if (good(mid, n, m)) { l = mid; } else { r = mid - 1; } } for (int i = 0; i <= l; i++) { g[i].clear(); rg[i].clear(); used[i] = false; pref[i] = 0; } for (int i = 1; i <= l; i++) { if (i >= n) { g[i].pb(i - n); rg[i - n].pb(i); //i < i - n } if (i >= m) { g[i - m].pb(i); rg[i].pb(i - m); } } cout << l << '\n'; for (int i = 1; i <= l; i++) { long long gr = 1e18; for (auto x: g[i]) { if (x < i) { chkmin(gr, pref[x] - 1); } } long long gl = -1e18; for (auto x: rg[i]) { if (x < i) { chkmin(gl, pref[x] + 1); } } gl -= pref[i - 1]; gr -= pref[i - 1]; if (gl <= 1 && 1 <= gr) { cout << 1 << ' '; pref[i] = pref[i - 1] + 1; continue; } if (gl <= -1 && -1 <= gr) { cout << -1 << ' '; pref[i] = pref[i - 1] - 1; continue; } if (gl >= 0) { chkmax(gl, 1); pref[i] = pref[i - 1] + gl; assert(gl >= -1e9 && gl <= 1e9); cout << gl << ' '; } else { chkmin(gr, -1); pref[i] = pref[i - 1] + gr; assert(gr >= -1e9 && gr <= 1e9); cout << gr << ' '; } } cout << '\n'; } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); //read(FILENAME); int t; cin >> t; for (int it = 0; it < t; it++) { int n, m; cin >> n >> m; solve(n, m); } }
#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...