結果
| 問題 |
No.2027 (1, 2, 3, …, N) 's Subset Sum
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-08-01 01:20:27 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,323 bytes |
| コンパイル時間 | 350 ms |
| コンパイル使用メモリ | 81,988 KB |
| 実行使用メモリ | 266,816 KB |
| 最終ジャッジ日時 | 2024-07-21 07:42:38 |
| 合計ジャッジ時間 | 4,878 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 2 TLE * 1 -- * 22 |
ソースコード
import sys
input = lambda: sys.stdin.readline().rstrip()
ii = lambda: int(input())
mi = lambda: map(int, input().split())
li = lambda: list(mi())
inf = 2 ** 63 - 1
mod = 998244353
import random
n, s = mi()
class ListDict(object):
def __init__(self):
self.item_to_position = {}
self.items = []
def add_item(self, item):
if item in self.item_to_position:
return
self.items.append(item)
self.item_to_position[item] = len(self.items)-1
def remove_item(self, item):
position = self.item_to_position.pop(item)
last_item = self.items.pop()
if position != len(self.items):
self.items[position] = last_item
self.item_to_position[last_item] = position
def choose_random_item(self):
return random.choice(self.items)
summ = 0
ans = []
D = ListDict()
for i in range(1, n + 1):
D.add_item(i)
cnt = 0
while True:
cnt += 1
now = D.choose_random_item()
if summ + now <= s:
summ += now
ans.append(now)
D.remove_item(now)
if summ == s:
break
if cnt >= 10 ** 6 and summ != s:
cnt = 0
ans = []
summ = 0
D = ListDict()
for i in range(1, n + 1):
D.add_item(i)
print(len(ans))
print(*sorted(ans))