結果
問題 |
No.3178 free sort
|
ユーザー |
![]() |
提出日時 | 2025-06-13 21:39:58 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,372 bytes |
コンパイル時間 | 169 ms |
コンパイル使用メモリ | 82,884 KB |
実行使用メモリ | 67,644 KB |
最終ジャッジ日時 | 2025-06-13 21:40:03 |
合計ジャッジ時間 | 4,332 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | RE * 5 |
other | RE * 40 |
ソースコード
from collections import defaultdict, deque, Counter from functools import cache # import copy from itertools import combinations, permutations, product, accumulate, groupby, chain from more_itertools import distinct_permutations from heapq import heapify, heappop, heappush, heappushpop import math import bisect from pprint import pprint from random import randint, shuffle, randrange from sortedcontainers import SortedSet, SortedList, SortedDict import sys sys.setrecursionlimit(5000) input = lambda: sys.stdin.readline().rstrip('\n') inf = float('inf') mod1 = 10**9+7 mod2 = 998244353 def ceil_div(x, y): return -(-x//y) ################################################# def cmb(n, r): if r < 0 or r > n: return 0 r = min(r, n-r) return fact[n]*factinv[r]%p*factinv[n-r]%p def pmt(n, r): if r < 0 or r > n: return 0 return fact[n]*factinv[n-r]%p p = mod2 N = 10**6 #Nは必要分だけ用意する fact = [1, 1] #fact[n]: n! mod p factinv = [1, 1] #factinv[n]: n!^(-1) mod p inv = [0, 1] #inv[n]: n^(-1) mod p for i in range(2, N+1): fact.append((fact[-1]*i)%p) inv.append((-inv[p%i]*(p//i))%p) factinv.append((factinv[-1]*inv[-1])%p) N = input() D = len(N) cnt = Counter(map(int, N)) ans = cmb(D-1, cnt[0]) D -= cnt[0] for k in range(1, 10): ans *= cmb(D, cnt[k]) ans %= mod2 D -= cnt[k] print(ans)