結果
問題 |
No.2617 容量3のナップザック
|
ユーザー |
![]() |
提出日時 | 2025-06-12 21:39:16 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,646 bytes |
コンパイル時間 | 286 ms |
コンパイル使用メモリ | 81,696 KB |
実行使用メモリ | 180,992 KB |
最終ジャッジ日時 | 2025-06-12 21:43:50 |
合計ジャッジ時間 | 11,052 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 12 WA * 28 |
ソースコード
def main(): import sys input = sys.stdin.read data = input().split() N = int(data[0]) K = int(data[1]) seed = int(data[2]) a = int(data[3]) b = int(data[4]) m = int(data[5]) f = [0] * (2 * N) f[0] = seed for i in range(1, 2 * N): f[i] = (a * f[i-1] + b) % m w1 = [] w2 = [] w3 = [] for i in range(N): wi = (f[i] % 3) + 1 vi = wi * f[N + i] if wi == 1: w1.append(vi) elif wi == 2: w2.append(vi) else: w3.append(vi) w1.sort(reverse=True) w2.sort(reverse=True) w3.sort(reverse=True) pre_sum_w1 = [0] * (len(w1) + 1) for i in range(len(w1)): pre_sum_w1[i+1] = pre_sum_w1[i] + w1[i] i3 = 0 i2 = 0 i1 = 0 total = 0 remaining = K while remaining > 0: options = [] if i3 < len(w3): options.append((w3[i3], '3')) if i2 < len(w2) and i1 < len(w1): options.append((w2[i2] + w1[i1], '21')) if i1 + 3 <= len(w1): val = pre_sum_w1[i1 + 3] - pre_sum_w1[i1] options.append((val, '111')) if not options: break max_option = max(options, key=lambda x: x[0]) if max_option[1] == '3': total += max_option[0] i3 += 1 elif max_option[1] == '21': total += max_option[0] i2 += 1 i1 += 1 else: total += max_option[0] i1 += 3 remaining -= 1 print(total) if __name__ == "__main__": main()