1 条题解
-
0
https://www.luogu.com.cn/problem/AT_arc091_c
#include <bits/stdc++.h> using namespace std; int n, a, b; vector<int> ans; int main() { ios::sync_with_stdio(false); cin.tie(0); cin >> n >> a >> b; if (n < (a + b - 1) || 1LL * a * b < n) { cout << "-1"; return 0; } // 构造一个长度为 a 的最大上升放前面 for (int i = n - a + 1; i <= n; i++) ans.push_back(i); n -= a; b--; // 第一组构成了下降部分的第一项,后续还需要 b-1 组 // 1~n 做出来 b 组,每组都不超过 a 个上升 while (n - a >= b - 1) // 这一组拿 a 个,剩下的还能凑出来 b-1组 { for (int i = n - a + 1; i <= n; i++) ans.push_back(i); n -= a; b--; } // 当前最多几个 if (n >= 1) // 还需要做 { int now = n - (b - 1); for (int i = n - now + 1; i <= n; i++) ans.push_back(i); n -= now; b--; } // 一个一个放,n 组,每组 1 个 for (int i = n; i >= 1; i--) ans.push_back(i); for (int i = 0; i < ans.size(); i++) cout << ans[i] << " "; return 0; }
- 1
信息
- ID
- 53
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 47
- 已通过
- 5
- 上传者