結果
| 問題 |
No.2617 容量3のナップザック
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 17:03:21 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,646 bytes |
| コンパイル時間 | 155 ms |
| コンパイル使用メモリ | 82,596 KB |
| 実行使用メモリ | 181,632 KB |
| 最終ジャッジ日時 | 2025-06-12 17:03:44 |
| 合計ジャッジ時間 | 10,158 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| 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()
gew1fw