結果
問題 | No.1141 田グリッド |
ユーザー |
|
提出日時 | 2020-07-31 22:09:37 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 82 ms / 2,000 ms |
コード長 | 3,588 bytes |
コンパイル時間 | 2,179 ms |
コンパイル使用メモリ | 136,008 KB |
最終ジャッジ日時 | 2025-01-12 10:20:59 |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 31 |
コンパイルメッセージ
main.cpp: In function ‘int main()’: main.cpp:95:23: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 95 | ll H, W; scanf("%lld %lld", &H, &W); | ~~~~~^~~~~~~~~~~~~~~~~~~~~ main.cpp:96:110: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 96 | vector<vector<ll>> a(H, vector<ll>(W)); for (int i = 0; i < H; i++) for (int j = 0; j < W; j++) scanf("%lld", &a[i][j]); | ~~~~~^~~~~~~~~~~~~~~~~~ main.cpp:107:23: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 107 | int kkt; scanf("%d", &kkt); | ~~~~~^~~~~~~~~~~~ main.cpp:123:40: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 123 | int r, c; scanf("%d %d", &r, &c); | ~~~~~^~~~~~~~~~~~~~~~~ main.cpp:149:40: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 149 | int r, c; scanf("%d %d", &r, &c); | ~~~~~^~~~~~~~~~~~~~~~~
ソースコード
#include <cstdio>#include <iostream>#include <string>#include <sstream>#include <stack>#include <algorithm>#include <cmath>#include <queue>#include <map>#include <set>#include <cstdlib>#include <bitset>#include <tuple>#include <assert.h>#include <deque>#include <bitset>#include <iomanip>#include <limits>#include <chrono>#include <random>#include <array>#include <unordered_map>#include <functional>#include <complex>#include <numeric>template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return 1; } return 0; }template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return 1; } return 0; }//constexpr long long MAX = 5100000;constexpr long long INF = 1LL << 60;constexpr int inf = 1000000007;constexpr long long mod = 1000000007LL;//constexpr long long mod = 998244353LL;const long double PI = acos((long double)(-1));using namespace std;typedef unsigned long long ull;typedef long long ll;typedef long double ld;struct mint {long long x;mint(long long x = 0) :x((x% mod + mod) % mod) {}mint& operator+=(const mint a) {if ((x += a.x) >= mod) x -= mod;return *this;}mint& operator-=(const mint a) {if ((x += mod - a.x) >= mod) x -= mod;return *this;}mint& operator*=(const mint a) {(x *= a.x) %= mod;return *this;}mint operator+(const mint a) const {mint res(*this);return res += a;}mint operator-(const mint a) const {mint res(*this);return res -= a;}mint operator*(const mint a) const {mint res(*this);return res *= a;}mint pow(ll t) const {if (!t) return 1;mint a = pow(t >> 1);a *= a;if (t & 1) a *= *this;return a;}// for prime modmint inv() const {return pow(mod - 2);}mint& operator/=(const mint a) {return (*this) *= a.inv();}mint operator/(const mint a) const {mint res(*this);return res /= a;}};int main(){/*cin.tie(nullptr);ios::sync_with_stdio(false);*/ll H, W; scanf("%lld %lld", &H, &W);vector<vector<ll>> a(H, vector<ll>(W)); for (int i = 0; i < H; i++) for (int j = 0; j < W; j++) scanf("%lld", &a[i][j]);vector<int> zH(H), zW(W);int cnt = 0;for (int i = 0; i < H; i++) {for (int j = 0; j < W; j++) if(a[i][j] == 0)zH[i]++, cnt++;}for (int j = 0; j < W; j++) {for (int i = 0; i < H; i++) if(a[i][j] == 0)zW[j]++;}int kkt; scanf("%d", &kkt);if (cnt > 0) {mint all = 1;for (int i = 0; i < H; i++) for (int j = 0; j < W; j++) if (a[i][j] != 0) all *= a[i][j];vector<mint> pH(H, 1), pW(W, 1);for (int i = 0; i < H; i++) {mint res = 1;for (int j = 0; j < W; j++) if(a[i][j] != 0) res *= a[i][j];pH[i] = res;}for (int j = 0; j < W; j++) {mint res = 1;for (int i = 0; i < H; i++) if(a[i][j] != 0) res *= a[i][j];pW[j] = res;}while (kkt--) {int r, c; scanf("%d %d", &r, &c);r--; c--;int t = zH[r] + zW[c] - (a[r][c] == 0);if (t == cnt) {mint res = all / pH[r] / pW[c];if (a[r][c] != 0) res *= a[r][c];printf("%lld\n", res.x);}else puts("0");}}else {mint all = 1;for (int i = 0; i < H; i++) for (int j = 0; j < W; j++) all *= a[i][j];vector<mint> pH(H, 1), pW(W, 1);for (int i = 0; i < H; i++) {mint res = 1;for (int j = 0; j < W; j++) res *= a[i][j];pH[i] = res;}for (int j = 0; j < W; j++) {mint res = 1;for (int i = 0; i < H; i++) res *= a[i][j];pW[j] = res;}while (kkt--) {int r, c; scanf("%d %d", &r, &c);r--; c--;printf("%lld\n", (all / pH[r] / pW[c] * a[r][c]).x);}}return 0;}