結果
| 問題 | No.1141 田グリッド |
| コンテスト | |
| ユーザー |
Apass
|
| 提出日時 | 2020-08-01 00:36:32 |
| 言語 | Java (openjdk 23) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,268 bytes |
| コンパイル時間 | 3,025 ms |
| コンパイル使用メモリ | 77,260 KB |
| 実行使用メモリ | 69,268 KB |
| 最終ジャッジ日時 | 2024-07-06 22:58:40 |
| 合計ジャッジ時間 | 14,368 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 21 WA * 10 |
ソースコード
import java.io.*;
import java.util.*;
// https://yukicoder.me/problems/no/1141
public class RiceFieldGrid {
static final int MOD = 1000000007; // 10**9 + 7
private static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
private static final PrintWriter pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
private static StringTokenizer st;
private static int readInt() throws IOException {
while (st == null || !st.hasMoreTokens()) st = new StringTokenizer(br.readLine());
return Integer.parseInt(st.nextToken());
}
public static void main(String[] args) throws IOException {
solve();
pw.close();
}
private static void solve() throws IOException {
int H = readInt();
int W = readInt();
long[][] g = new long[H][W];
for (int i = 0; i < H; i++) {
for (int j = 0; j < W; j++) {
g[i][j] = readInt();
}
}
long[] rowProduct = new long[H];
long allProduct = 1;
for (int i = 0; i < H; i++) {
long prod = 1;
for (int j = 0; j < W; j++) {
prod = prod * g[i][j] % MOD;
}
rowProduct[i] = prod;
allProduct = allProduct * prod % MOD;
}
long[] columnProduct = new long[W];
for (int j = 0; j < W; j++) {
long prod = 1;
for (int i = 0; i < H; i++) {
prod = prod * g[i][j] % MOD;
}
columnProduct[j] = prod;
}
int Q = readInt();
for (int i = 0; i < Q; i++) {
int r = readInt() - 1;
int c = readInt() - 1;
pw.println(allProduct
* inverse(rowProduct[r]) % MOD
* inverse(columnProduct[c]) % MOD
* g[r][c] % MOD);
}
}
static long inverse(long num) {
// raise MOD to p-2 power.
long base = num;
long inverse = 1;
int exp = MOD - 2;
while (exp > 0) {
if (exp % 2 == 1) inverse = inverse * base % MOD;
base = base * base % MOD;
exp /= 2;
}
return inverse;
}
}
Apass