結果
| 問題 |
No.1001 注文の多い順列
|
| コンテスト | |
| ユーザー |
maspy
|
| 提出日時 | 2020-04-15 12:27:19 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
AC
|
| 実行時間 | 525 ms / 2,000 ms |
| コード長 | 742 bytes |
| コンパイル時間 | 273 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 44,752 KB |
| 最終ジャッジ日時 | 2024-10-01 18:42:19 |
| 合計ジャッジ時間 | 18,211 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 31 |
ソースコード
import sys
read = sys.stdin.buffer.read
readline = sys.stdin.buffer.readline
readlines = sys.stdin.buffer.readlines
import numpy as np
MOD = 10 ** 9 + 7
N = int(readline())
TX = np.array(read().split(), np.int32)
T = TX[::2]
X = TX[1::2]
X[T == 1] -= 1
ind = X.argsort()
X = X[ind].tolist()
T = T[ind].tolist()
dp = np.zeros(1, np.int64)
dp[0] = 1
for t, x in zip(T, X):
newdp = np.zeros(len(dp) + 1, np.int64)
newdp[1:] = dp * np.arange(x, x - len(dp), -1)
newdp[x + 1:] = 0
if t == 1:
newdp[:-1] += dp
newdp %= MOD
dp = newdp
fact = 1
for i in range(1, N + 1):
fact *= i
fact %= MOD
dp[N - i] *= fact
n = (N - sum(T)) & 1
dp[n ^ 1 ::2] *= - 1
dp %= MOD
answer = dp.sum() % MOD
print(answer)
maspy