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;
} 
京公网安备 11010502036488号