結果
問題 | No.1141 田グリッド |
ユーザー |
|
提出日時 | 2020-07-31 22:15:55 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,346 bytes |
コンパイル時間 | 1,551 ms |
コンパイル使用メモリ | 175,972 KB |
実行使用メモリ | 6,948 KB |
最終ジャッジ日時 | 2024-07-06 18:35:04 |
合計ジャッジ時間 | 5,711 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 21 WA * 10 |
ソースコード
#include <bits/stdc++.h>#define rep(i,n) for(int i=0;i<(int)(n);i++)using namespace std;using ll = long long ;using P = pair<int,int> ;using pll = pair<long long,long long>;constexpr int INF = 1e9;constexpr long long LINF = 1e17;constexpr int MOD = 1000000007;constexpr double PI = 3.14159265358979323846;template<int mod> struct ModInt{long long x=0;constexpr ModInt(long long x=0):x((x%mod+mod)%mod){}constexpr ModInt operator+(const ModInt& r)const{return ModInt(*this)+=r;}constexpr ModInt operator-(const ModInt& r)const{return ModInt(*this)-=r;}constexpr ModInt operator*(const ModInt& r)const{return ModInt(*this)*=r;}constexpr ModInt operator/(const ModInt& r)const{return ModInt(*this)/=r;}constexpr ModInt& operator+=(const ModInt& r){ if((x+=r.x)>=mod) x-=mod; return *this;}constexpr ModInt& operator-=(const ModInt& r){ if((x-=r.x)<0) x+=mod; return *this;}constexpr ModInt& operator*=(const ModInt& r){ if((x*=r.x)>=mod) x%=mod; return *this;}constexpr ModInt& operator/=(const ModInt& r){ return *this*=r.inv();}ModInt inv() const {long long s=x,sx=1,sy=0,t=mod,tx=0,ty=1;while(s%t!=0){long long temp=s/t,u=s-t*temp,ux=sx-temp*tx,uy=sy-temp*ty;s=t;sx=tx;sy=ty;t=u;tx=ux;ty=uy;}return ModInt(tx);}ModInt pow(long long n) const {ModInt a=1;while(n>0){if(n&1) a*=*this;*this*=*this;n>>=1;}return a;}friend constexpr ostream& operator<<(ostream& os,const ModInt<mod>& a) {return os << a.x;}friend constexpr istream& operator>>(istream& is,ModInt<mod>& a) {return is >> a.x;}};using mint = ModInt<MOD>;int main(){int h,w;cin >> h >> w;vector<vector<ll>> a(h,vector<ll>(w,0));rep(i,h)rep(j,w) cin >> a[i][j];vector<mint> hh(h,1);vector<mint> ww(w,1);rep(i,h){mint now = 1;rep(j,w) now *= a[i][j];hh[i] = now;}rep(j,w){mint now = 1;rep(i,h) now *= a[i][j];ww[j] = now;}mint all = 1;rep(i,h) all *= hh[i];int q;cin >> q;while(q--){int r,c;cin >> r >> c;--r;--c;cout << (all*a[r][c])/(hh[r]*ww[c]) << endl;}return 0;}