結果
| 問題 |
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);
}
}