結果
| 問題 |
No.1202 お菓子の食べ方
|
| コンテスト | |
| ユーザー |
hotman78
|
| 提出日時 | 2020-08-22 09:38:07 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,244 bytes |
| コンパイル時間 | 472 ms |
| コンパイル使用メモリ | 81,920 KB |
| 実行使用メモリ | 118,236 KB |
| 最終ジャッジ日時 | 2024-11-07 22:59:43 |
| 合計ジャッジ時間 | 32,009 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 WA * 31 RE * 4 |
ソースコード
MOD=1000000007
sz=1000000
table=[1]*sz
inv=[1]*sz
inv_table=[1]*sz
for i in range(2,sz):
table[i]=table[i-1]*i%MOD
for i in range(2,sz):
inv[i]=(MOD-inv[MOD%i]*(MOD//i))%MOD
for i in range(2,sz):
inv_table[i]=inv_table[i-1]*inv[i]%MOD
def comb(i,j):
if i<j:
return 0
if i<0 or j<0:
return 0
return table[i]*inv_table[j]*inv_table[i-j]%MOD
def mod_inv(a):
b=MOD-2
ret=1
while b:
if b%2==1:
ret=ret*a%MOD
a=a*a%MOD
b//=2
return ret
import math
n,m=list(map(int,input().split()))
v=[[0]*m for x in range(n)]
assert(1<=n and n<=1000)
assert(1<=m and m<=1000)
for i in range(n):
v[i]=list(map(int,input().split()))
ans=0
for i in range(n):
for j in range(m):
tmp=0
tmp+=comb(i+j+v[i][j]-1,v[i][j]-1)
if(i!=n-1):
tmp+=(comb(i+j+v[i][j],i+j)*v[i][j]-comb(i+j+v[i+1][j],i+j)*v[i+1][j])*mod_inv(i+j+1)
else:
tmp+=comb(i+j+v[i][j],i+j)*v[i][j]*mod_inv(i+j+1)
if j!=m-1:
tmp+=(comb(i+j+v[i][j],i+j)*v[i][j]-comb(i+j+v[i][j+1],i+j)*v[i][j+1])*mod_inv(i+j+1)
else:
tmp+=comb(i+j+v[i][j],i+j)*v[i][j]*mod_inv(i+j+1)
ans+=tmp*comb(i+j,i)%MOD
print(ans)
hotman78