답안 #54445

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
54445 2018-07-03T13:02:33 Z egorlifar Nice sequence (IZhO18_sequence) C++17
6 / 100
23 ms 19496 KB
/*
ЗАПУСКАЕМ 
░ГУСЯ░▄▀▀▀▄░РАБОТЯГУ░░
▄███▀░◐░░░▌░░░░░░░
░░░░▌░░░░░▐░░░░░░░
░░░░▐░░░░░▐░░░░░░░
░░░░▌░░░░░▐▄▄░░░░░
░░░░▌░░░░▄▀▒▒▀▀▀▀▄
░░░▐░░░░▐▒▒▒▒▒▒▒▒▀▀▄
░░░▐░░░░▐▄▒▒▒▒▒▒▒▒▒▒▀▄
░░░░▀▄░░░░▀▄▒▒▒▒▒▒▒▒▒▒▀▄
░░░░░░▀▄▄▄▄▄█▄▄▄▄▄▄▄▄▄▄▄▀▄
░░░░░░░░░░░▌▌░▌▌░░░░░
░░░░░░░░░░░▌▌░▌▌░░░░░
░░░░░░░░░▄▄▌▌▄▌▌░░░░░ 
 */
#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;
            cout << gl << ' ';
        } else {
            chkmin(gr, -1);
            pref[i] = pref[i - 1] + gr;
            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);
    }
}          
# 결과 실행 시간 메모리 Grader output
1 Correct 18 ms 19192 KB Ok
2 Correct 18 ms 19284 KB Ok
3 Correct 23 ms 19284 KB Ok
4 Correct 19 ms 19464 KB Ok
5 Correct 17 ms 19464 KB Ok
6 Correct 18 ms 19464 KB Ok
7 Correct 18 ms 19464 KB Ok
8 Correct 18 ms 19464 KB Ok
9 Correct 19 ms 19464 KB Ok
10 Correct 18 ms 19484 KB Ok
11 Correct 18 ms 19484 KB Ok
12 Correct 17 ms 19488 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Incorrect 19 ms 19496 KB there is incorrect sequence
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 18 ms 19496 KB there is incorrect sequence
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 18 ms 19496 KB there is incorrect sequence
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 18 ms 19192 KB Ok
2 Correct 18 ms 19284 KB Ok
3 Correct 23 ms 19284 KB Ok
4 Correct 19 ms 19464 KB Ok
5 Correct 17 ms 19464 KB Ok
6 Correct 18 ms 19464 KB Ok
7 Correct 18 ms 19464 KB Ok
8 Correct 18 ms 19464 KB Ok
9 Correct 19 ms 19464 KB Ok
10 Correct 18 ms 19484 KB Ok
11 Correct 18 ms 19484 KB Ok
12 Correct 17 ms 19488 KB Ok
13 Incorrect 18 ms 19496 KB there is incorrect sequence
14 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 18 ms 19192 KB Ok
2 Correct 18 ms 19284 KB Ok
3 Correct 23 ms 19284 KB Ok
4 Correct 19 ms 19464 KB Ok
5 Correct 17 ms 19464 KB Ok
6 Correct 18 ms 19464 KB Ok
7 Correct 18 ms 19464 KB Ok
8 Correct 18 ms 19464 KB Ok
9 Correct 19 ms 19464 KB Ok
10 Correct 18 ms 19484 KB Ok
11 Correct 18 ms 19484 KB Ok
12 Correct 17 ms 19488 KB Ok
13 Incorrect 19 ms 19496 KB there is incorrect sequence
14 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 18 ms 19192 KB Ok
2 Correct 18 ms 19284 KB Ok
3 Correct 23 ms 19284 KB Ok
4 Correct 19 ms 19464 KB Ok
5 Correct 17 ms 19464 KB Ok
6 Correct 18 ms 19464 KB Ok
7 Correct 18 ms 19464 KB Ok
8 Correct 18 ms 19464 KB Ok
9 Correct 19 ms 19464 KB Ok
10 Correct 18 ms 19484 KB Ok
11 Correct 18 ms 19484 KB Ok
12 Correct 17 ms 19488 KB Ok
13 Incorrect 19 ms 19496 KB there is incorrect sequence
14 Halted 0 ms 0 KB -