結果
| 問題 |
No.1916 Making Palindrome on Gird
|
| コンテスト | |
| ユーザー |
hiromi_ayase
|
| 提出日時 | 2022-04-30 01:53:31 |
| 言語 | Rust (1.83.0 + proconio) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,883 bytes |
| コンパイル時間 | 14,295 ms |
| コンパイル使用メモリ | 378,708 KB |
| 実行使用メモリ | 796,800 KB |
| 最終ジャッジ日時 | 2024-06-29 07:49:21 |
| 合計ジャッジ時間 | 16,998 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 7 WA * 3 MLE * 1 -- * 19 |
ソースコード
#[allow(clippy::many_single_char_names)]
fn main() {
let s = getline();
let a = s.split(' ').collect::<Vec<_>>();
let h = a[0].parse::<usize>().unwrap();
let w = a[1].parse::<usize>().unwrap();
let mut s = vec![vec!['a'; w]; h];
for i in 0..h {
s[i] = getline().chars().collect();
}
let mut dp = vec![vec![vec![vec![0; w]; h]; w]; h];
dp[0][0][h - 1][w - 1] = 1;
let m = 1_000_000_007;
for i in 0..h {
for j in 0..w {
for ni in (0..h).rev() {
for nj in (0..w).rev() {
if ni < i || nj < j {
continue;
}
if i + 1 < ni && s[i + 1][j] == s[ni - 1][nj] {
dp[i + 1][j][ni - 1][nj] += dp[i][j][ni][nj];
dp[i + 1][j][ni - 1][nj] %= m;
}
if i < ni && j < nj && s[i + 1][j] == s[ni][nj - 1] {
dp[i + 1][j][ni][nj - 1] += dp[i][j][ni][nj];
dp[i + 1][j][ni][nj - 1] %= m;
}
if i < ni && j < nj && s[i][j + 1] == s[ni - 1][nj] {
dp[i][j + 1][ni - 1][nj] += dp[i][j][ni][nj];
dp[i][j + 1][ni - 1][nj] %= m;
}
if j + 1 < nj && s[i][j + 1] == s[ni][nj - 1] {
dp[i][j + 1][ni][nj - 1] += dp[i][j][ni][nj];
dp[i][j + 1][ni][nj - 1] %= m;
}
}
}
}
}
let mut ans = 0;
for i in 0..h {
for j in 0..w {
ans += dp[i][j][i][j];
ans %= m;
}
}
println!("{}", ans);
}
fn getline() -> String {
let mut buf = String::new();
std::io::stdin().read_line(&mut buf).unwrap();
buf.trim().to_string()
}
hiromi_ayase