結果
問題 | No.295 hel__world |
ユーザー |
![]() |
提出日時 | 2020-05-04 13:40:19 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,880 bytes |
コンパイル時間 | 221 ms |
コンパイル使用メモリ | 12,928 KB |
実行使用メモリ | 30,460 KB |
最終ジャッジ日時 | 2024-06-24 07:51:08 |
合計ジャッジ時間 | 6,728 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 25 WA * 4 RE * 24 |
ソースコード
import sysfrom functools import lru_cacheread = sys.stdin.buffer.readreadline = sys.stdin.buffer.readlinereadlines = sys.stdin.buffer.readlinesINF = 2 ** 62S = tuple(map(int, readline().split()))T = tuple(x - ord('a') for x in read().rstrip())L = [[] for _ in range(26)]last_ch = -1last_len = 0for x in T:if x != last_ch:L[x].append(1)else:L[x][-1] += 1last_ch = xdef check_zero(S, L):for a in range(26):# if S[a] > 0 and (not L[a]):# return Trueif S[a] < sum(L[a]):return Trueif check_zero(S, L):print(0)@lru_cache(None)def comb(n, k):if k < 0 or k > n:return 0k = min(k, n-k)x = 1for i in range(k):x *= (n - i)x //= (i + 1)if x >= INF:return INFreturn xdef compute(n, nums):if not nums:return 1n -= sum(nums)if not n:return 1nums.sort(reverse=True)nums = nums[:70]if sum(nums) >= 6 and n > 10 ** 4:return INFif n <= 10 ** 4:A = nums[:]for _ in range(n):# 1 増やすと美味しいところを増やすi = max(range(len(nums)), key=lambda i: (A[i]+1) / (A[i] - nums[i] + 1))A[i] += 1x = 1for a, k in zip(A, nums):x *= comb(a,k)return x# n が大きくて、kは2種類# 基本的には、同じくらいの大きさにすればよいのでret = 1avg = n // len(nums)for p in itertools.product(range(avg - 4, avg + 5), repeat=len(nums)):if sum(avg) != n:continuex = 1for a, k in zip(p, nums):x *= comb(a,k)if ret < x:ret = xreturn retx = 1for n, nums in zip(S, L):x *= compute(n, nums)if x >= INF:x = 'hel'print(x)