Submission #93177

#TimeUsernameProblemLanguageResultExecution timeMemory
93177VardanyanNice sequence (IZhO18_sequence)C++14
100 / 100
1522 ms49784 KiB
#include <bits/stdc++.h>
using namespace std;
const int N = 1000*1000+5;
int pref[N];
int col[N];
int now = N;
int n,m;
int len;
void dfs(int v){
    col[v] = 1;
    if(v == 0){
        now = -1;
    }
    else{
        pref[v] = now;
        now--;
    }
  if(v-m>=0)  dfs(v-m);
  if(v+n<=len)  dfs(v+n);
}
bool check(int v){
    col[v] = 1;
    for(int i = 0;i<2;i++){
        int to = -1;
        if(i == 0 && v-m>=0) to = v-m;
        else if(i == 1 && v+n<=len) to = v+n;
        if(to == -1) continue;
        if(!col[to]){
            if(check(to)) return true;
        }
        else if(col[to] == 1){
            return true;
        }
    }
    col[v] = 2;
    return false;
}
int main(){
    ios_base::sync_with_stdio(false);
    int t;
    cin>>t;
    while(t--){
        cin>>n>>m;
        int l = min(n,m)-1;
        int r = n+m;
        int as = -1;
        while(l<=r){
            memset(col,0,sizeof col);
            now = N;
            int mid = (l+r)/2;
            len = mid;
            bool f = true;
            for(int i = 1;i<=mid;i++){
                if(!col[i]){
                    if(check(i)){
                        f = false;
                        break;
                    }
                }
            }
            if(!f){
                r = mid-1;
                continue;
            }
            else{
                as = mid;
                l = mid+1;
            }
        }
        if(as == -1){
            cout<<0<<endl;
            continue;
        }
        memset(col,0,sizeof col);
        memset(pref,0,sizeof pref);
        len = as;
        for(int i = n;i>=0;i--){
            if(!col[i]) dfs(i);
        }
        cout<<as<<endl;
        for(int i = 1;i<=as;i++){
            int x = pref[i]-pref[i-1];
            cout<<x<<" ";
        }
        cout<<endl;
    }
	return 0;
}
#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...