結果
| 問題 |
No.2617 容量3のナップザック
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 16:59:46 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,469 bytes |
| コンパイル時間 | 270 ms |
| コンパイル使用メモリ | 82,608 KB |
| 実行使用メモリ | 166,208 KB |
| 最終ジャッジ日時 | 2025-06-12 16:59:57 |
| 合計ジャッジ時間 | 9,810 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 12 WA * 28 |
ソースコード
def main():
import sys
input = sys.stdin.read().split()
idx = 0
N = int(input[idx]); idx +=1
K = int(input[idx]); idx +=1
seed = int(input[idx]); idx +=1
a = int(input[idx]); idx +=1
b = int(input[idx]); idx +=1
m = int(input[idx]); idx +=1
# Generate f sequence
size = 2 * N
f = [0] * size
f[0] = seed
for i in range(1, size):
f[i] = (a * f[i-1] + b) % m
# Separate into w3, w2, w1
w3 = []
w2 = []
w1 = []
for i in range(N):
fi = f[i]
w = (fi % 3) + 1
v = w * f[i + N]
if w == 3:
w3.append(v)
elif w == 2:
w2.append(v)
else:
w1.append(v)
# Sort each in descending order
w3.sort(reverse=True)
w2.sort(reverse=True)
w1.sort(reverse=True)
i3 = 0
i2 = 0
i1 = 0
total = 0
groups_formed = 0
while groups_formed < K:
possible = []
# Check group3
if i3 < len(w3):
possible.append((w3[i3], 'group3'))
# Check group2_1
if i2 < len(w2) and i1 < len(w1):
possible.append((w2[i2] + w1[i1], 'group2_1'))
# Check group1 options
max_take = min(3, len(w1) - i1)
if max_take >= 3:
sum_v = w1[i1] + w1[i1 + 1] + w1[i1 + 2]
possible.append((sum_v, 'group1_3'))
elif max_take >= 2:
sum_v = w1[i1] + w1[i1 + 1]
possible.append((sum_v, 'group1_2'))
elif max_take >= 1:
possible.append((w1[i1], 'group1_1'))
if not possible:
break
# Select the maximum value option
max_val = -1
selected = None
for val, typ in possible:
if val > max_val:
max_val = val
selected = typ
if selected is None:
break
# Form the group
if selected == 'group3':
total += w3[i3]
i3 += 1
elif selected == 'group2_1':
total += w2[i2] + w1[i1]
i2 += 1
i1 += 1
elif selected == 'group1_3':
total += w1[i1] + w1[i1 + 1] + w1[i1 + 2]
i1 += 3
elif selected == 'group1_2':
total += w1[i1] + w1[i1 + 1]
i1 += 2
elif selected == 'group1_1':
total += w1[i1]
i1 += 1
groups_formed += 1
print(total)
if __name__ == "__main__":
main()
gew1fw