結果
| 問題 | No.3429 Palindromic Path (Hard) |
| コンテスト | |
| ユーザー |
tau1235
|
| 提出日時 | 2026-01-11 14:29:31 |
| 言語 | C++23 (gcc 15.2.0 + boost 1.89.0) |
| 結果 |
AC
|
| 実行時間 | 1,525 ms / 2,000 ms |
| コード長 | 960 bytes |
| 記録 | |
| コンパイル時間 | 3,702 ms |
| コンパイル使用メモリ | 352,028 KB |
| 実行使用メモリ | 168,960 KB |
| 最終ジャッジ日時 | 2026-01-11 14:29:39 |
| 合計ジャッジ時間 | 6,816 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 7 |
ソースコード
#include<bits/stdc++.h>
#include<atcoder/modint>
using namespace std;
int main(){
using mint=atcoder::modint998244353;
vector<int> dy={1,0},dx={0,1};
int n;
cin>>n;
vector<string> c(n);
for (int i=0;i<n;i++) cin>>c[i];
map<tuple<int,int,int,int>,mint> mp;
for (int i=0;i<n;i++) mp[{n-i-1,i,n-i-1,i}]=1;
for (int d=n-1;d>=0;d--){
for (int k1=0;k1<=d;k1++) for (int k2=0;k2<=d;k2++){
int j1=k1,i1=d-j1;
int j2=n-1-k2,i2=2*(n-1)-d-j2;
if (d==n-1&&j1!=j2) continue;
mint val=mp[{i1,j1,i2,j2}];
if (val==0) continue;
for (int d1=0;d1<2;d1++) for (int d2=0;d2<2;d2++){
int ni1=i1-dy[d1],nj1=j1-dx[d1];
int ni2=i2+dy[d2],nj2=j2+dx[d2];
if (!(0<=ni1&&ni1<n&&0<=nj1&&nj1<n)) continue;
if (!(0<=ni2&&ni2<n&&0<=nj2&&nj2<n)) continue;
if (c[ni1][nj1]==c[ni2][nj2]){
mp[{ni1,nj1,ni2,nj2}]+=val;
}
}
}
}
cout<<mp[{0,0,n-1,n-1}].val()<<endl;
}
tau1235