結果
| 問題 |
No.1001 注文の多い順列
|
| コンテスト | |
| ユーザー |
titia
|
| 提出日時 | 2020-04-30 08:08:06 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 306 ms / 2,000 ms |
| コード長 | 797 bytes |
| コンパイル時間 | 174 ms |
| コンパイル使用メモリ | 82,720 KB |
| 実行使用メモリ | 147,572 KB |
| 最終ジャッジ日時 | 2024-12-14 10:47:39 |
| 合計ジャッジ時間 | 6,083 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 31 |
ソースコード
N=int(input())
mod=10**9+7
T0=[]
T1=[]
for i in range(N):
t,x=map(int,input().split())
if t==0:
T0.append(x)
else:
T1.append(x)
T0.sort()
T1.sort()
UP0=[0]*(N+1)
DOWN1=[0]*(N+1)
for t in T0:
UP0[t]+=1
for i in range(N-1,-1,-1):
UP0[i]+=UP0[i+1]
for t in T1:
DOWN1[t]+=1
for i in range(1,N+1):
DOWN1[i]+=DOWN1[i-1]
DP=[[0]*(N+1) for i in range(N+1)]
DP[0][0]=1
for SUM in range(1,N+1):
for t_0 in range(min(SUM+1,len(T0)+1)):
t_1=SUM-t_0
if t_0>=1 and UP0[SUM]-(len(T0)-t_0)>=0:
DP[t_0][t_1]+=DP[t_0-1][t_1]*(UP0[SUM]-(len(T0)-t_0))
if t_1>=1 and DOWN1[SUM]-(t_1-1)>=0:
DP[t_0][t_1]+=DP[t_0][t_1-1]*(DOWN1[SUM]-(t_1-1))
DP[t_0][t_1]%=mod
print(DP[len(T0)][len(T1)]%mod)
titia