#include using namespace std; int dp[11]; int total; // お菓子の買い方が見つかるかチェック. // @param K: 合計個数. // @param D: 合計金額. // @param N: お菓子の最大金額. // @param p: 調査対象の菓子の金額. // @return ret: // true: お菓子の買い方が見つかった。 // false: お菓子の買い方が見つからなかった. bool buy(int K, int D, int N, int p){ bool ret = false; for(int i = p + 1; i <= N - K + p; i++){ if(total == D){ ret = true; break; } total++; dp[p] = i; } return ret; } int main() { // 1. 入力情報取得. int N, D, K; cin >> N >> D >> K; // 2. 存在しないケース. total = K * (K + 1) / 2; if(D < total){ cout << -1 << endl; return 0; } if(D > N * K - K * (K - 1) / 2){ cout << -1 << endl; return 0; } // 3. 探索. for(int i = 1; i <= K; i++) dp[i] = i; // 後ろから確認. for(int i = K; i >= 1; i--){ bool b = buy(K, D, N, i); if(b) break; } // 4. 出力. for(int i = 1; i <= K; i++) cout << dp[i] << " "; return 0; }