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; }