結果
問題 | No.1141 田グリッド |
ユーザー |
![]() |
提出日時 | 2020-07-31 21:51:59 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 88 ms / 2,000 ms |
コード長 | 2,159 bytes |
コンパイル時間 | 673 ms |
コンパイル使用メモリ | 80,996 KB |
実行使用メモリ | 14,440 KB |
最終ジャッジ日時 | 2024-07-06 17:42:37 |
合計ジャッジ時間 | 3,900 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 31 |
ソースコード
#include <iostream>#include <cstdio>#include <cmath>#include <ctime>#include <cstdlib>#include <cassert>#include <vector>#include <list>#include <stack>#include <queue>#include <deque>#include <map>#include <set>#include <bitset>#include <string>#include <algorithm>#include <utility>#define llint long long#define inf 1e18#define rep(x, s, t) for(llint (x) = (s); (x) < (t); (x)++)#define Rep(x, s, t) for(llint (x) = (s); (x) <= (t); (x)++)#define chmin(x, y) (x) = min((x), (y))#define chmax(x, y) (x) = max((x), (y))#define mod 1000000007using namespace std;typedef pair<llint, llint> P;llint Q;llint h, w;llint a[300005], lu[300005], ru[300005], ld[300005], rd[300005];llint modpow(llint a, llint n){if(n == 0) return 1;if(n % 2){return ((a%mod) * (modpow(a, n-1)%mod)) % mod;}else{return modpow((a*a)%mod, n/2) % mod;}}llint get(llint x, llint y){return y*(w+2)+x;}int main(void){ios::sync_with_stdio(0);cin.tie(0);cin >> h >> w;llint mul = 1;for(int y = 1; y <= h; y++){for(int x = 1; x <= w; x++){cin >> a[get(x, y)];}}for(int y = 0; y <= h+1; y++){for(int x = 0; x <= w+1; x++){lu[get(x, y)] = ru[get(x, y)] = ld[get(x, y)] = rd[get(x, y)] = 1;}}for(int y = 1; y <= h; y++){for(int x = 1; x <= w; x++){lu[get(x, y)] = lu[get(x-1, y)] * a[get(x, y)] % mod;ld[get(x, y)] = ld[get(x-1, y)] * a[get(x, y)] % mod;}for(int x = w; x >= 1; x--){ru[get(x, y)] = ru[get(x+1, y)] * a[get(x, y)] % mod;rd[get(x, y)] = rd[get(x+1, y)] * a[get(x, y)] % mod;}}for(int x = 1; x <= w; x++){for(int y = 1; y <= h; y++){lu[get(x, y)] *= lu[get(x, y-1)], lu[get(x, y)] %= mod;ru[get(x, y)] *= ru[get(x, y-1)], ru[get(x, y)] %= mod;}for(int y = h; y >= 1; y--){ld[get(x, y)] *= ld[get(x, y+1)], ld[get(x, y)] %= mod;rd[get(x, y)] *= rd[get(x, y+1)], rd[get(x, y)] %= mod;}}cin >> Q;llint x, y;for(int i = 0; i < Q; i++){cin >> y >> x;llint ans = lu[get(x-1, y-1)] * ru[get(x+1, y-1)] % mod;ans *= ld[get(x-1, y+1)] * rd[get(x+1, y+1)] % mod, ans %= mod;cout << ans << endl;}return 0;}