結果
| 問題 |
No.115 遠足のおやつ
|
| コンテスト | |
| ユーザー |
@abcde
|
| 提出日時 | 2019-06-05 00:11:04 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2 ms / 5,000 ms |
| コード長 | 1,244 bytes |
| コンパイル時間 | 1,516 ms |
| コンパイル使用メモリ | 160,868 KB |
| 実行使用メモリ | 6,820 KB |
| 最終ジャッジ日時 | 2025-01-01 18:00:00 |
| 合計ジャッジ時間 | 2,924 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 40 |
ソースコード
#include <bits/stdc++.h>
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;
}
@abcde