Submission #1188228

#TimeUsernameProblemLanguageResultExecution timeMemory
1188228thinknoexitMobitel (COCI19_mobitel)C++20
0 / 130
725 ms6296 KiB
#include<bits/stdc++.h> using namespace std; using ll = long long; const int MOD = 1e9 + 7; ll a[303][303]; int dp[2][303][1010]; // end (i, j) such that mul == k int dp2[2][303][1010]; // end (i, j) such that mul == n / k int dp3[303][303]; int main() { cin.tie(nullptr)->sync_with_stdio(false); int n, m; ll s; cin >> n >> m >> s; ll sq = sqrt(s); dp3[1][1] = 1; for (int i = 1;i <= n;i++) { for (int j = 1;j <= m;j++) { cin >> a[i][j]; dp3[i][j] = (dp3[i][j] + dp3[i - 1][j]) % MOD; dp3[i][j] = (dp3[i][j] + dp3[i][j - 1]) % MOD; } } if (s == 1) { cout << dp3[n][m] << '\n'; return 0; } if (a[1][1] <= sq) dp[1][1][a[1][1]] = 1; else dp2[1][1][(s + a[1][1] - 1) / a[1][1]] = 1; for (int i = 1;i <= n;i++) { int now = i & 1, nxt = 1 - now; memset(dp[nxt], 0, sizeof dp[nxt]); for (int j = 1;j <= m;j++) { // cout << "index : " << i << ' ' << j << '\n'; // cout << "---------\n"; for (int k = 1;k <= sq;k++) { // dp[i][j], dp2[i][j] -> dp[i+1][j], dp2[i+1][j] if (i != n) { ll v = a[i + 1][j] * k; if (v <= sq) dp[nxt][j][v] = (dp[nxt][j][v] + dp[now][j][k]) % MOD; else if (v < s) v = (s + v - 1) / v, dp2[nxt][j][v] = (dp2[nxt][j][v] + dp[now][j][k]) % MOD; v = (k + a[i + 1][j] - 1) / a[i + 1][j]; if (v > 1) dp2[nxt][j][v] = (dp2[nxt][j][v] + dp2[now][j][k]) % MOD; } // dp[i][j], dp2[i][j] -> dp[i+1][j], dp2[i+1][j] if (j != m) { ll v = a[i][j + 1] * k; if (v <= sq) dp[now][j + 1][v] = (dp[now][j + 1][v] + dp[now][j][k]) % MOD; else if (v < s) v = (s + v - 1) / v, dp2[now][j + 1][v] = (dp2[now][j + 1][v] + dp[now][j][k]) % MOD; v = (k + a[i][j + 1] - 1) / a[i][j + 1]; if (v > 1) dp2[now][j + 1][v] = (dp2[now][j + 1][v] + dp2[now][j][k]) % MOD; } // cout << dp[now][j][k] << ' ' << dp2[now][j][k] << '\n'; } } } int ans = dp3[n][m]; for (int i = 1;i <= sq;i++) { ans = (ans - dp[n & 1][m][i] + MOD) % MOD; } for (int i = 2;i <= sq;i++) { ans = (ans - dp2[n & 1][m][i] + MOD) % MOD; } cout << ans << '\n'; return 0; }
#Verdict Execution timeMemoryGrader output
Fetching results...