A 环球旅行

Solution

B 恢复数列

Solution

由于解一定存在,我们考虑构造 a[1] 为 n , 用一个 vector 存取后面的构造值
首先将 m 个 n - 1 放入 vector 里,如果此时 vector.size() == n - 1 则构造结束
否则我们删去 vector 的第一个元素v[0], 在后面补上 m 个 v[0] - 1,重复上述过程
直到出现 vector.size() == n - 1
但是正确性我不会证明orz

Code

#pragma GCC optimize(3)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long long LL;
const int N = 1e6  + 5;
const ll mod = 1e9 + 7;
const int DEG = 20;
const double PI = acos(-1.0);
const double eps = 1e-10;
const ll inf = 1e18;
static auto faster_iostream = []() {
    std::ios::sync_with_stdio(false);  // turn off sync
    std::cin.tie(nullptr);             // untie in/out streams
    return 0;
}();
int main(){
  ll n, m;
  cin >> n >> m;
  vector<int> v;
  cout << n << " "; // m ^ n
  for(int i = 1; i <= m; i++){
    v.push_back(n - 1);
  }
  while(v.size() < n - 1){
    int pos = v[0];
    v.erase(v.begin());
    for(int i = 1; i <= m; i++){
      v.push_back(pos - 1);
    }
  }
  for(int i = 0; i < v.size(); i++){
    cout << v[i] << " \n"[i == v.size() - 1];
  }
  return 0;
}

C 回到过去

Solution