結果
| 問題 |
No.1141 田グリッド
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-07-31 23:39:17 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 3,689 bytes |
| コンパイル時間 | 191 ms |
| コンパイル使用メモリ | 82,200 KB |
| 実行使用メモリ | 94,724 KB |
| 最終ジャッジ日時 | 2024-07-06 21:53:02 |
| 合計ジャッジ時間 | 13,385 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 21 WA * 10 |
ソースコード
MOD = 10**9 + 7
class modint():
def __init__(self, value):
self.value = value % MOD
def __int__(self):
return int(self.value)
def __float__(self):
return float(self.value)
def __str__(self):
return str(self.value)
def __repr__(self):
return str(self.value)
def __add__(self, other):
return (modint(self.value + other.value) if isinstance(other, modint)
else modint(self.value + other))
def __sub__(self, other):
return (modint(self.value - other.value) if isinstance(other, modint)
else modint(self.value - other))
def __mul__(self, other):
return (modint(self.value * other.value) if isinstance(other, modint)
else modint(self.value * other))
def __truediv__(self, other):
return (modint(self.value * pow(other.value, MOD - 2, MOD))
if isinstance(other, modint)
else modint(self.value * pow(other, MOD - 2, MOD)))
def __pow__(self, other):
return (modint(pow(self.value, other.value, MOD))
if isinstance(other, modint)
else modint(pow(self.value, other, MOD)))
def __eq__(self, other):
return (self.value == other.value if isinstance(other, modint)
else self.value == (other % MOD))
def __ne__(self, other):
return (self.value != other.value if isinstance(other, modint)
else self.value != (other % MOD))
def __radd__(self, other):
return (modint(other.value + self.value) if isinstance(other, modint)
else modint(other + self.value))
def __rsub__(self, other):
return (modint(other.value - self.value) if isinstance(other, modint)
else modint(other - self.value))
def __rmul__(self, other):
return (modint(other.value * self.value) if isinstance(other, modint)
else modint(other * self.value))
def __rtruediv__(self, other):
return (modint(other.value * pow(self.value, MOD - 2, MOD))
if isinstance(other, modint)
else modint(other * pow(self.value, MOD - 2, MOD)))
def __rpow__(self, other):
return (modint(pow(other.value, self.value, MOD))
if isinstance(other, modint)
else modint(pow(other, self.value, MOD)))
def modinv(self):
return modint(pow(self.value, MOD - 2, MOD))
def main():
H, W = (int(i) for i in input().split())
A = [[modint(int(i)) for i in input().split()] for j in range(H)]
pres_h = [1]*(H)
pres_w = [1]*(W)
zero_h = []
zero_w = []
for h in range(H):
mul = modint(1)
for w in range(W):
if A[h][w] == 0:
zero_h.append(h)
break
else:
mul *= A[h][w]
pres_h[h] = mul
for w in range(W):
mul = modint(1)
for h in range(H):
if A[h][w] == 0:
zero_w.append(w)
break
else:
mul *= A[h][w]
pres_w[w] = mul
zero_h = set(zero_h)
zero_w = set(zero_w)
ans = modint(1)
for h in range(H):
for w in range(W):
if h in zero_h or w in zero_w:
continue
if A[h][w] != 0:
ans *= A[h][w]
Q = int(input())
for _ in range(Q):
r, c = (int(i)-1 for i in input().split())
v = ans / pres_h[r] / pres_w[c] * A[r][c]
if len(zero_h - {r}) + len(zero_w - {c}) > 0:
print(0)
else:
print(v + MOD)
if __name__ == '__main__':
main()