답안 #54447

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
54447 2018-07-03T13:04:50 Z egorlifar Nice sequence (IZhO18_sequence) C++17
6 / 100
24 ms 19440 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) {
                chkmax(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);
    }
}          
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 19064 KB Ok
2 Correct 17 ms 19200 KB Ok
3 Correct 24 ms 19272 KB Ok
4 Correct 17 ms 19304 KB Ok
5 Correct 17 ms 19440 KB Ok
6 Correct 17 ms 19440 KB Ok
7 Correct 17 ms 19440 KB Ok
8 Correct 17 ms 19440 KB Ok
9 Correct 17 ms 19440 KB Ok
10 Correct 17 ms 19440 KB Ok
11 Correct 17 ms 19440 KB Ok
12 Correct 17 ms 19440 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Incorrect 20 ms 19440 KB there is incorrect sequence
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 16 ms 19440 KB there is incorrect sequence
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 17 ms 19440 KB there is incorrect sequence
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 19064 KB Ok
2 Correct 17 ms 19200 KB Ok
3 Correct 24 ms 19272 KB Ok
4 Correct 17 ms 19304 KB Ok
5 Correct 17 ms 19440 KB Ok
6 Correct 17 ms 19440 KB Ok
7 Correct 17 ms 19440 KB Ok
8 Correct 17 ms 19440 KB Ok
9 Correct 17 ms 19440 KB Ok
10 Correct 17 ms 19440 KB Ok
11 Correct 17 ms 19440 KB Ok
12 Correct 17 ms 19440 KB Ok
13 Incorrect 16 ms 19440 KB there is incorrect sequence
14 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 19064 KB Ok
2 Correct 17 ms 19200 KB Ok
3 Correct 24 ms 19272 KB Ok
4 Correct 17 ms 19304 KB Ok
5 Correct 17 ms 19440 KB Ok
6 Correct 17 ms 19440 KB Ok
7 Correct 17 ms 19440 KB Ok
8 Correct 17 ms 19440 KB Ok
9 Correct 17 ms 19440 KB Ok
10 Correct 17 ms 19440 KB Ok
11 Correct 17 ms 19440 KB Ok
12 Correct 17 ms 19440 KB Ok
13 Incorrect 20 ms 19440 KB there is incorrect sequence
14 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 19 ms 19064 KB Ok
2 Correct 17 ms 19200 KB Ok
3 Correct 24 ms 19272 KB Ok
4 Correct 17 ms 19304 KB Ok
5 Correct 17 ms 19440 KB Ok
6 Correct 17 ms 19440 KB Ok
7 Correct 17 ms 19440 KB Ok
8 Correct 17 ms 19440 KB Ok
9 Correct 17 ms 19440 KB Ok
10 Correct 17 ms 19440 KB Ok
11 Correct 17 ms 19440 KB Ok
12 Correct 17 ms 19440 KB Ok
13 Incorrect 20 ms 19440 KB there is incorrect sequence
14 Halted 0 ms 0 KB -