結果
問題 |
No.1916 Making Palindrome on Gird
|
ユーザー |
|
提出日時 | 2025-05-16 10:00:34 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 216 ms / 3,000 ms |
コード長 | 1,539 bytes |
コンパイル時間 | 2,355 ms |
コンパイル使用メモリ | 214,464 KB |
実行使用メモリ | 70,784 KB |
最終ジャッジ日時 | 2025-05-16 10:00:41 |
合計ジャッジ時間 | 5,797 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 |
コンパイルメッセージ
main.cpp: In function ‘void Thaer()’: main.cpp:48:16: warning: ignoring return value of ‘FILE* freopen(const char*, const char*, FILE*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 48 | freopen("input.txt", "r", stdin); | ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~ main.cpp:49:16: warning: ignoring return value of ‘FILE* freopen(const char*, const char*, FILE*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] 49 | freopen("output.txt", "w", stdout); | ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~
ソースコード
#include <bits/stdc++.h> using namespace std; //#define int int64_t #define el '\n' const int MOD=1e9+7; void Main() { int n, m; cin >> n >> m; vector<vector<char>> grid(n, vector<char>(m)); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> grid[i][j]; } } vector<vector<vector<int64_t>>> dp(n, vector<vector<int64_t>>(m, vector<int64_t>(n, 0))); vector<vector<vector<bool>>> vis(n, vector<vector<bool>>(m, vector<bool>(n, 0))); function<int64_t(int, int, int, int)> solve = [&](int i, int j, int ii, int jj) -> int64_t { if (i >= n || j >= m || ii < i || jj < j)return 0; if (grid[i][j] != grid[ii][jj])return 0; if (abs(i - ii) + abs(j - jj) <= 1)return 1; if (vis[i][j][ii])return dp[i][j][ii]; vis[i][j][ii] = 1; int64_t &ret = dp[i][j][ii]; ret += solve(i + 1, j, ii - 1, jj); ret %= MOD; ret += solve(i, j + 1, ii, jj - 1); ret %= MOD; ret += solve(i + 1, j, ii, jj - 1); ret %= MOD; ret += solve(i, j + 1, ii - 1, jj); return ret %= MOD; }; cout << solve(0, 0, n - 1, m - 1) << el; } void Thaer(); int32_t main() { cin.tie(0)->sync_with_stdio(0); // Thaer(); int T = 1; // cin >> T; for (int i = 1; i <= T; ++i) { Main(); // if (i != T)cout << el; } } void Thaer() { if (fopen("input.txt", "r")) { freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); } }