結果
問題 | No.115 遠足のおやつ |
ユーザー |
![]() |
提出日時 | 2025-03-20 20:30:42 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 41 ms / 5,000 ms |
コード長 | 1,929 bytes |
コンパイル時間 | 207 ms |
コンパイル使用メモリ | 82,784 KB |
実行使用メモリ | 54,040 KB |
最終ジャッジ日時 | 2025-03-20 20:31:38 |
合計ジャッジ時間 | 3,454 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 40 |
ソースコード
def find_snack_combination(): import sys N, D, K = map(int, sys.stdin.readline().split()) def dfs(path, start, remaining, current_sum): if remaining == 0: if current_sum == D: return path else: return None for i in range(start, N + 1): new_sum = current_sum + i if new_sum > D: break # Prune if sum exceeds D next_remaining = remaining - 1 if next_remaining == 0: if new_sum == D: return path + [i] else: continue # Skip if last element doesn't reach D required = D - new_sum m = next_remaining # Calculate minimum possible sum with next m elements starting from i+1 a = i + 1 if a + m - 1 > N: min_sum = (m * (a + (a + m - 1))) // 2 if a > N: min_sum = 0 # Invalid if there are not enough elements else: min_sum = (m * (2 * a + m - 1)) // 2 # Calculate maximum possible sum with the largest m elements max_elem = N if max_elem < m: max_sum = 0 # Not enough elements else: max_sum = (m * (max_elem + (max_elem - m + 1))) // 2 if min_sum > required or max_sum < required: continue # Prune if sum cannot be achieved # Continue DFS result = dfs(path + [i], i + 1, next_remaining, new_sum) if result is not None: return result return None combination = dfs([], 1, K, 0) if combination: print(' '.join(map(str, combination))) else: print(-1) find_snack_combination()