結果
| 問題 |
No.1629 Sorting Integers (SUM of M)
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-07-31 12:30:32 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,753 bytes |
| コンパイル時間 | 252 ms |
| コンパイル使用メモリ | 12,928 KB |
| 実行使用メモリ | 64,560 KB |
| 最終ジャッジ日時 | 2024-09-16 09:26:39 |
| 合計ジャッジ時間 | 13,137 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | WA * 4 |
| other | WA * 14 |
ソースコード
import typing
from math import factorial
import numpy as np
import sys
class ModFactorial:
def __call__(
self,
n: int = 1 << 20,
) -> np.array:
a = np.arange(n); a[0] = 1
return self.cumprod(a)
def cumprod(
self,
a: np.array,
) -> np.array:
m = self.__mod
l = len(a)
n = int(np.sqrt(l) + 1)
a = np.resize(a, (n, n))
for i in range(n-1):
a[:, i + 1] *= a[:, i]
a[:, i + 1] %= m
for i in range(n-1):
a[i + 1] *= a[i, -1]
a[i + 1] %= m
return np.ravel(a)[:l]
def __init__(
self,
modulo: int,
) -> typing.NoReturn:
self.__mod = modulo
def inv(
self,
n: int = 1 << 20,
) -> np.array:
a = np.arange(1, n + 1)
m = self.__mod
x = int(self(n)[-1])
a[-1] = pow(x, m - 2, m)
return self.cumprod(
a[::-1],
)[n::-1]
class Inverse():
def __call__(
self,
i: int,
) -> int:
return self[i]
def __getitem__(
self,
i: int,
) -> int:
return self.__a[i]
def __init__(
self,
n: int,
modulo: int,
) -> typing.NoReturn:
m = modulo
fn = ModFactorial(m)
a = fn.inv(n)
a[1:] *= fn(n - 1)
self.__a = a % m
def main() -> typing.NoReturn:
mod = 10 ** 9 + 7
fn = ModFactorial(mod)
fact = fn(1 << 18)
ifact = fn.inv(1 << 18)
inv = Inverse(1 << 18, mod)
n = int(input())
c = np.array(
sys.stdin.readline()
.split(),
dtype=np.int64,
)
m = fact[n]
for x in c:
m *= ifact[x]
m %= mod
s = (np.arange(9) + 1) * c
s = s.sum()
s *= inv[n]
s %= mod
d = 0
for _ in range(n):
d *= 10
d += 1
d %= mod
s = s * d % mod * m % mod
print(s)
print(fact)
print(ifact)
print(inv)
main()