#define _CRT_SECURE_NO_WARNINGS #include "bits/stdc++.h" using namespace std; #define MAX 2000000 // bool check(int L, int N, int D, int K){ if (N - L + 1 < K) return false; int low = 0; int high = 0; for (int i = 0; i < K; i++) { low += L + i; high += N - i; } //lowもhighもtrueならtrueそれでないなら,falseだ return low <= D && high >= D; } /*この作りは秀逸で、 チェック機構がありそこを突破できるなら、(チェック機構でtrueならばという意味) チェック機構はチェックするだけで変数に何の影響も与えない。 チェック機構突破後は、そのi変数が最小になるので取り敢えず順次出力する。 そして最後(K==1)の時にendlをするのはいつものパターン。 その前の、チェック機構では、Dの値をiずつ減らし、でも影響は与えない。 Kの値も減らす。*/ int main(){ int N, D, K; cin >> N >> D >> K; if (check(1, N, D, K)){ for (int i = 1; i <= N && K > 0; i++) { if (check(i + 1, N, D - i, K - 1)){ if (K == 1){ cout << i << endl; } else cout << i << " "; D -= i; K--; } } } else cout << "-1" << endl; }