This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define FOR(i,a,b) for (int i = (a); i < (b); ++i)
#define pb push_back
#define all(a) a.begin(), a.end()
#define endl "\n"
void printVector(vector<int> a){
for (auto x: a) cout << x << " ";
cout << endl;
}
vector<int> possible(int x, int n, int m){
vector<vector<int>> graph(x+1); // edge from i to j iff pref[i] < pref[j]
vector<int> indeg(x+1);
for (int i = m; i <= x; ++i){
graph[i-m].pb(i);
indeg[i] = 1;
}
for (int i = n; i <= x; ++i){
graph[i].pb(i-n);
indeg[i-n] = 1;
}
int val = 1;
vector<int> visited(x+1);
vector<int> prefix(x+1);
FOR(i,0,x+1){
// cout << i << ": ";
// printVector(graph[i]);
}
stack<int> s;
FOR(i,0,x+1){
if (indeg[i] == 0){
s.push(i);
// cout << i << endl;
}
}
if (s.empty()){
return {};
}
while (!s.empty()){
int current = s.top();
s.pop();
if (visited[current]){
return {};
}
prefix[current] = val;
val++;
for (auto item: graph[current]){
s.push(item);
}
visited[current] = 1;
}
FOR(i,0,x+1){
if (!visited[i]) return {};
}
return prefix;
}
void solve(){
int n, m; cin >> n >> m;
int l = 0; int r = 1000000;
vector<int> best;
while (l < r){
int mid = (l+r)/2;
if (l+1 == r){
if (!possible(r, n, m).empty()){
best = possible(r, n, m);
}else{
best = possible(l, n, m);
}
break;
}
vector<int> o = possible(mid, n, m);
// cout << l << r << mid << endl;
if (!o.empty()){
// cout << mid << endl;
l = mid;
best = o;
}else{
r = mid;
}
}
// printVector(possible(7, 3, 6));
// printVector(best);
cout << best.size()-1 << endl;
FOR(i,1,best.size()) cout << best[i]-best[i-1] << " ";
cout << endl;
}
int32_t main(){
ios::sync_with_stdio(false);cin.tie(nullptr);
int t = 1; cin >> t;
while (t--) solve();
}
Compilation message (stderr)
sequence.cpp: In function 'void solve()':
sequence.cpp:5:40: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
5 | #define FOR(i,a,b) for (int i = (a); i < (b); ++i)
| ^
sequence.cpp:93:5: note: in expansion of macro 'FOR'
93 | FOR(i,1,best.size()) cout << best[i]-best[i-1] << " ";
| ^~~| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |