Submission #378914

#TimeUsernameProblemLanguageResultExecution timeMemory
378914balbitNice sequence (IZhO18_sequence)C++14
100 / 100
970 ms44596 KiB
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define pii pair<int, int>
#define f first
#define s second

#ifdef BALBIT
#define bug(...) cerr<<"#"<<__LINE__<<#__VA_ARGS__<<"- ", _do(__VA_ARGS__)
template<typename T> void _do(T && x){cerr<<x<<endl;}
template<typename T, typename ...S> void _do(T && x, S && ...y){cerr<<x<<", "; _do(y...);}
#else
#define bug(...)
#define endl '\n'
#endif // BALBIT


#define REP(i,n) for (int i = 0; i<n; ++i)
#define SZ(x) (int)((x).size())
#define ALL(x) (x).begin(), (x).end()
#define pb push_back

int a,b,L;
const int maxn = 4e5+5;
int seen[maxn];

bool dfs(int v, int c) {
    seen[v] = c;
    if (v-a>=0) {
        if (seen[v-a]) {
            if (seen[v-a] == c) return 0;
        }else{
            if (!dfs(v-a,c)) return 0;
        }
    }
    if (v+b<=L) {
        if (seen[v+b]) {
            if (seen[v+b] == c) return 0;
        }else{
            if (!dfs(v+b,c)) return 0;
        }
    }
    return 1;
}
vector<int> po;
bool dfs2(int v, int c) {
    seen[v] = c;
//    bug("try",v);
    if (v-a>=0) {
        if (seen[v-a]) {
            if (seen[v-a] == c) return 0;
        }else{
            if (!dfs2(v-a,c)) return 0;
        }
    }
    if (v+b<=L) {
        if (seen[v+b]) {
            if (seen[v+b] == c) return 0;
        }else{
            if (!dfs2(v+b,c)) return 0;
        }
    }
//    bug("wtf",v);
    po.pb(v);
    return 1;
}

signed main(){
    ios::sync_with_stdio(0), cin.tie(0);

    bug(1,2);
    int t; cin>>t;
    while (t--) {
        cin>>a>>b;
        int l = max(a,b)-1, r = a+b+1;
        while (l!=r) {
            int mid = (l+r)/2;
            L = mid;
            memset(seen, 0, sizeof seen);
            bool ok = 1;
            REP(i,L+1) {
                if (!seen[i]) {
                    if (!dfs(i, i+1)) {
                        ok = 0;
//                        bug(i);
                        break;
                    }
                }
            }
            if (ok ) {
                l = mid+1;
            }else{
                r=mid;
            }
            bug(mid, ok);
        }
        --l;
        L = l;
        cout<<l<<endl;
        memset(seen, 0,sizeof seen);
        po.clear();
        REP(i,l+1) {
            if (!seen[i]) {
                assert(dfs2(i,i+1));
            }
        }
//        bug(SZ(po));
        vector<int> re(l+1);
        REP(i, SZ(po)) {
            re[po[i]] = i;
        }
        REP(i, SZ(po)) {
            if (i) {
                cout<<re[i-1]-re[i]<<' ';
            }
        }
        cout<<endl;
    }
}
#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...