結果
| 問題 |
No.1141 田グリッド
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-07-31 22:46:38 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 3,264 bytes |
| コンパイル時間 | 2,143 ms |
| コンパイル使用メモリ | 201,324 KB |
| 最終ジャッジ日時 | 2025-01-12 11:03:43 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 21 WA * 10 |
ソースコード
/*** author: yuji9511 ***/
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using lpair = pair<ll, ll>;
const ll MOD = 1e9+7;
const ll INF = 1e18;
#define rep(i,m,n) for(ll i=(m);i<(n);i++)
#define rrep(i,m,n) for(ll i=(m);i>=(n);i--)
#define printa(x,n) for(ll i=0;i<n;i++){cout<<(x[i])<<" \n"[i==n-1];};
void print() {}
template <class H,class... T>
void print(H&& h, T&&... t){cout<<h<<" \n"[sizeof...(t)==0];print(forward<T>(t)...);}
ll power(ll x, ll n){
if(n == 0) return 1LL;
ll res = power(x * x % MOD, n/2);
if(n % 2 == 1) res = res * x % MOD;
return res;
}
void solve(){
ll H,W;
cin >> H >> W;
vector< vector<ll> > A(H+1, vector<ll>(W+1));
rep(i,0,H){
rep(j,0,W){
cin >> A[i][j];
}
}
ll Q;
cin >> Q;
bool zero_tate[100010] = {}, zero_yoko[100010] = {};
rep(i,0,H){
rep(j,0,W){
if(A[i][j] == 0){
zero_tate[i] = true;
zero_yoko[j] = true;
}
}
}
ll mul = 1;
rep(i,0,H){
rep(j,0,W){
if(zero_tate[i] == false && zero_yoko[j] == false){
mul *= A[i][j];
mul %= MOD;
}
}
}
ll tate[100010] = {}, yoko[100010] = {};
rep(i,0,H){
ll res = 1;
rep(j,0,W){
res *= A[i][j];
res %= MOD;
}
tate[i] = res;
}
rep(j,0,W){
ll res = 1;
rep(i,0,H){
res *= A[i][j];
res %= MOD;
}
yoko[j] = res;
}
ll c1 = 0, c2 = 0;
ll p1 = -1, p2 = -1;
rep(i,0,H){
if(zero_tate[i]) c1++;
}
rep(j,0,W){
if(zero_yoko[j]) c2++;
}
if(c1 >= 2 || c2 >= 2){
while(Q--){
ll r,c;
cin >> r >> c;
print(0);
}
}else{
while(Q--){
ll r,c;
cin >> r >> c;
r--; c--;
ll ans = mul;
if(c1 > 0 && zero_tate[r] == false){
print(0);
}else if(c2 > 0 && zero_yoko[c] == false){
print(0);
}else{
if(zero_tate[r] == false){
ans *= power(tate[r], MOD-2);
ans %= MOD;
if(zero_yoko[c] == false){
ans *= power(yoko[c], MOD-2);
ans %= MOD;
ans *= A[r][c];
ans %= MOD;
print(ans);
}else{
print(ans);
}
}else{
if(zero_yoko[c] == false){
ans *= power(yoko[c], MOD-2);
ans %= MOD;
print(ans);
}else{
print(ans);
}
}
}
}
}
// while(Q--){
// ll r,c;
// cin >> r >> c;
// r--; c--;
// ll ans = mul * power(tate[r],MOD-2) % MOD * power(yoko[c], MOD-2) % MOD * A[r][c] % MOD;
// print(ans);
// }
}
int main(){
cin.tie(0);
ios::sync_with_stdio(false);
solve();
}