結果
| 問題 |
No.1747 Many Formulae 2
|
| コンテスト | |
| ユーザー |
norioc
|
| 提出日時 | 2025-07-01 02:04:02 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 103 ms / 2,000 ms |
| コード長 | 960 bytes |
| コンパイル時間 | 502 ms |
| コンパイル使用メモリ | 82,288 KB |
| 実行使用メモリ | 72,340 KB |
| 最終ジャッジ日時 | 2025-07-01 02:04:05 |
| 合計ジャッジ時間 | 2,784 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 19 |
ソースコード
from collections import defaultdict
from functools import reduce
def set_order_partitions(n: int, yield_func):
def recur(p: int, g: list[int]):
if p == n:
yield_func(g)
return
# 左隣のグループに属する
g[p] = g[p-1]
recur(p+1, g)
# 新たなグループを作成する
g[p] = g[p-1]+1
recur(p+1, g)
assert n > 0
g = [0 for _ in range(n)]
recur(1, g)
def is_prime(n: int) -> bool:
if n < 2: return False
x = 2
while x * x <= n:
if n % x == 0: return False
x += 1
return True
S = input()
ds = [int(c) for c in S]
ans = 0
def func(g: list[int]):
global ans
d = defaultdict(list)
for i, p in enumerate(g):
d[p].append(ds[i])
t = 0
for vs in d.values():
t += reduce(lambda a, b: 10*a+b, vs, 0)
if is_prime(t):
ans += 1
set_order_partitions(len(S), func)
print(ans)
norioc