Submission #957141

#TimeUsernameProblemLanguageResultExecution timeMemory
957141pragmatistNice sequence (IZhO18_sequence)C++17
100 / 100
973 ms60284 KiB
#include <bits/stdc++.h>

using namespace std;

const int N = (int)4e5+20;
const int inf = (int)1e9+7;
const long long INF = (long long)1e18+7;
const int MOD = 42043;

int sum(int x, int y) {
	x += y;
	if(x >= MOD) {
		x -= MOD;
	}
	return x;
}

int mult(int x, int y) {
	return 1ll*x*y%MOD;
}

int n, m, o, dp[N];
bool ok;
vector<int> g[N], ord, ans;
int used[N];

void dfs(int v) {
	used[v] = 1;
	if(!ok) {
		return;
	}
	if(v-n>=0 && used[v-n]==1) {
		ok = 0;
		return;
	}
	if(v-n>=0 && !used[v-n]) {
		dfs(v-n);
	}
	if(v+m<=o && used[v+m]==1) {
		ok = 0;
		return;
	}
	if(v+m<=o && !used[v+m]) {
		dfs(v+m);
	}

	used[v] = 2;
	ord.push_back(v);
}

bool may(int len) {
	o = len;
	for(int i = 0; i <= len; ++i) {
		used[i] = 0;
		dp[i] = 0;
	}	
	ord.clear();
	ok = 1;
	for(int i = 0; i <= len; ++i) {
		if(!used[i]) {
			dfs(i);
		}
	}
	if(!ok) {
		return 0;
	}
	ans = ord;
	return 1;
}

void test_case() {
	cin >> n >> m;        
	int l = 0, r = 4e5, len = -1;
	while(l <= r) {
		int mid = (l+r)/2;
		if(may(mid)) {
			len = mid;
			l = mid+1;
		} else {
			r = mid-1;
		}
	}	   
	assert(len != -1);
	reverse(ans.begin(), ans.end());
	int timer = 0;
	for(auto i : ans) {
		dp[i] = ++timer;
	}
	cout << len << "\n";
	for(int i = 1; i <= len; ++i) {
		cout << dp[i]-dp[i-1] << ' ';
	}
	cout << "\n";
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    int t;
    cin >> t;
    while(t--) {
    	test_case();
    }
	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...