結果
| 問題 |
No.2617 容量3のナップザック
|
| コンテスト | |
| ユーザー |
gew1fw
|
| 提出日時 | 2025-06-12 21:36:28 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,930 bytes |
| コンパイル時間 | 226 ms |
| コンパイル使用メモリ | 81,676 KB |
| 実行使用メモリ | 161,932 KB |
| 最終ジャッジ日時 | 2025-06-12 21:39:01 |
| 合計ジャッジ時間 | 9,096 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 12 WA * 28 |
ソースコード
def main():
import sys
input = sys.stdin.read().split()
ptr = 0
N = int(input[ptr])
ptr +=1
K = int(input[ptr])
ptr +=1
seed = int(input[ptr])
ptr +=1
a = int(input[ptr])
ptr +=1
b = int(input[ptr])
ptr +=1
m = int(input[ptr])
ptr +=1
# Generate f sequence
size = 2 * N
f = [0] * size
f[0] = seed
for i in range(size -1):
f[i+1] = (a * f[i] + b) % m
# Group items
W1 = []
W2 = []
W3 = []
for i in range(N):
current_f = f[i]
w = (current_f % 3) + 1
v = w * f[N + i]
if w == 1:
W1.append(v)
elif w == 2:
W2.append(v)
else:
W3.append(v)
# Sort each group in descending order
W1.sort(reverse=True)
W2.sort(reverse=True)
W3.sort(reverse=True)
# Initialize pointers
ptr1 = 0
ptr2 = 0
ptr3 = 0
total = 0
for _ in range(K):
max_val = -1
option = None
# Option a: take from W3
if ptr3 < len(W3):
val = W3[ptr3]
if val > max_val:
max_val = val
option = 'a'
# Option b: take from W2 and W1
if ptr2 < len(W2) and ptr1 < len(W1):
val = W2[ptr2] + W1[ptr1]
if val > max_val:
max_val = val
option = 'b'
# Option c: take three from W1
if ptr1 + 2 < len(W1):
val = W1[ptr1] + W1[ptr1 +1] + W1[ptr1 +2]
if val > max_val:
max_val = val
option = 'c'
if option is None:
break
total += max_val
# Update pointers
if option == 'a':
ptr3 += 1
elif option == 'b':
ptr2 += 1
ptr1 += 1
elif option == 'c':
ptr1 += 3
print(total)
if __name__ == "__main__":
main()
gew1fw