結果
問題 | No.1141 田グリッド |
ユーザー |
![]() |
提出日時 | 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; } }