답안 #54446

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
54446 2018-07-03T13:04:01 Z egorlifar Nice sequence (IZhO18_sequence) C++17
6 / 100
22 ms 19488 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;
            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 21 ms 19192 KB Ok
2 Correct 21 ms 19192 KB Ok
3 Correct 20 ms 19360 KB Ok
4 Correct 21 ms 19360 KB Ok
5 Correct 20 ms 19360 KB Ok
6 Correct 22 ms 19360 KB Ok
7 Correct 22 ms 19364 KB Ok
8 Correct 20 ms 19412 KB Ok
9 Correct 21 ms 19412 KB Ok
10 Correct 20 ms 19412 KB Ok
11 Correct 22 ms 19412 KB Ok
12 Correct 21 ms 19420 KB Ok
# 결과 실행 시간 메모리 Grader output
1 Incorrect 21 ms 19420 KB there is incorrect sequence
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 20 ms 19420 KB there is incorrect sequence
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 22 ms 19488 KB there is incorrect sequence
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 21 ms 19192 KB Ok
2 Correct 21 ms 19192 KB Ok
3 Correct 20 ms 19360 KB Ok
4 Correct 21 ms 19360 KB Ok
5 Correct 20 ms 19360 KB Ok
6 Correct 22 ms 19360 KB Ok
7 Correct 22 ms 19364 KB Ok
8 Correct 20 ms 19412 KB Ok
9 Correct 21 ms 19412 KB Ok
10 Correct 20 ms 19412 KB Ok
11 Correct 22 ms 19412 KB Ok
12 Correct 21 ms 19420 KB Ok
13 Incorrect 20 ms 19420 KB there is incorrect sequence
14 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 21 ms 19192 KB Ok
2 Correct 21 ms 19192 KB Ok
3 Correct 20 ms 19360 KB Ok
4 Correct 21 ms 19360 KB Ok
5 Correct 20 ms 19360 KB Ok
6 Correct 22 ms 19360 KB Ok
7 Correct 22 ms 19364 KB Ok
8 Correct 20 ms 19412 KB Ok
9 Correct 21 ms 19412 KB Ok
10 Correct 20 ms 19412 KB Ok
11 Correct 22 ms 19412 KB Ok
12 Correct 21 ms 19420 KB Ok
13 Incorrect 21 ms 19420 KB there is incorrect sequence
14 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 21 ms 19192 KB Ok
2 Correct 21 ms 19192 KB Ok
3 Correct 20 ms 19360 KB Ok
4 Correct 21 ms 19360 KB Ok
5 Correct 20 ms 19360 KB Ok
6 Correct 22 ms 19360 KB Ok
7 Correct 22 ms 19364 KB Ok
8 Correct 20 ms 19412 KB Ok
9 Correct 21 ms 19412 KB Ok
10 Correct 20 ms 19412 KB Ok
11 Correct 22 ms 19412 KB Ok
12 Correct 21 ms 19420 KB Ok
13 Incorrect 21 ms 19420 KB there is incorrect sequence
14 Halted 0 ms 0 KB -