結果
問題 |
No.2617 容量3のナップザック
|
ユーザー |
![]() |
提出日時 | 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()