結果
問題 | No.599 回文かい |
ユーザー |
![]() |
提出日時 | 2017-11-25 01:26:12 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,281 bytes |
コンパイル時間 | 1,500 ms |
コンパイル使用メモリ | 167,384 KB |
実行使用メモリ | 156,160 KB |
最終ジャッジ日時 | 2024-11-27 08:59:49 |
合計ジャッジ時間 | 8,544 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 4 WA * 18 |
ソースコード
#include <bits/stdc++.h>#define rep(i, n) for (lli i = 0; i < (n); i++)#define rrep(i, n) for (lli i = (n)-1; i >= 0; i--)using namespace std;using lli = long long int;string s;lli mod = 1e9 + 7;int n;lli base[2] = {97, 103};lli p[2] = {(lli)1e9 + 7, (lli)1e9 + 9};lli dp[10005][10005] = {};lli hash_[1005][1005][2] = {};void fill(){// hash [l,r)rep(i, n){for (int j = i; j < n; j++) {rep(k, 2)hash_[i][j + 1][k]= (base[k] * hash_[i][j][k] + s[j]) % p[k];}}}lli f(lli l, lli r){lli ll = l, rr = r;if (l >= r)return 0;//cout << l << " " << r << endl;if (dp[l][r] != 0)return dp[l][r];dp[l][r] = 1;rep(i, n){if (ll >= rr) {break;}// s l..ll == s rr .. rbool flag = true;rep(k, 2){flag &= (hash_[l][ll + 1][k] == hash_[rr - 1][r][k]);}if (flag)dp[l][r] += f(ll + 1, rr - 1);dp[l][r] %= mod;ll++, rr--;}return dp[l][r];}int main(){cin >> s;n = s.size();fill();// cout << hash_[0][3][1] << endl;// cout << hash_[6][9][1] << endl;cout << f(0, n) << endl;}