前面全过,hack数据全T
查看原帖
前面全过,hack数据全T
1713700
tangtianyao楼主2025/8/30 10:57
#include <bits/stdc++.h>
#define int long long

using namespace std;

int a, b, dep;
vector<int> v, ans;
bool f;

int gcd(int a, int b){
  return b ? gcd(b, a % b) : a;
}

void dfs(int x, int a, int b, int l){
  if(x == dep){
    if(!a){
      if(ans.empty() || v.back() < ans.back()){
        ans = v;
      }
      f = 1;
    }else if(a == 1){
      if(b > v.back()){
        v.push_back(b);
        if(ans.empty() || v.back() < ans.back()){
          ans = v;
        }
        v.pop_back();
        f = 1;
      }
    }
    return ;
  }
  for(int i = max(l + 1, b / a); a * i < (dep - x + 1) * b; i++){
    int d = gcd(a * i - b, i * b);
    v.push_back(i);
    if(i <= 1e7 && (a * i - b) / d * 1e7 >= i * b / d){
      dfs(x + 1, (a * i - b) / d, i * b / d, i);
    }
    v.pop_back();
  }
}

signed main(){
  cin >> a >> b;
  int x = gcd(a, b);
  a /= x, b /= x;
  for(dep = 1; ; dep++){
    dfs(0, a, b, 1);
    if(f){
      for(int x : ans){
        cout << x << ' ';
      }
      break;
    }
  }
  return 0;
}

结果
题解也没看懂

2025/8/30 10:57
加载中...