結果

問題 No.599 回文かい
ユーザー snrnsidy
提出日時 2021-09-21 14:10:23
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 1,416 ms / 4,000 ms
コード長 1,792 bytes
コンパイル時間 2,404 ms
コンパイル使用メモリ 197,836 KB
最終ジャッジ日時 2025-01-24 16:09:15
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 22
権限があれば一括ダウンロードができます
コンパイルメッセージ
main.cpp: In function ‘int main()’:
main.cpp:20:10: warning: ignoring return value of ‘int scanf(const char*, ...)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
   20 |     scanf("%s", S);
      |     ~~~~~^~~~~~~~~

ソースコード

diff #
プレゼンテーションモードにする

#include <bits/stdc++.h>
using namespace std;
const int MOD = 10007;
inline int mod(long long n){
if(n >= 0) return n % MOD;
return ((-n/MOD+1)*MOD + n) % MOD;
}
short arr[10000][10000];
int dp[5005];
bool issame = true;
int L1,R1,L2,R2;
char S[200001];
set <int> s;
int main()
{
scanf("%s", S);
int L = strlen(S);
for(int i=0;i<L;i++)
{
s.insert(S[i]);
}
for(int mid=1;mid<=L;mid++)
{
int H = 0, power = 1;
for(int i=0; i<=L-mid; i++){
if(i == 0){
for(int j=0; j<mid; j++){
H = mod(H + 1LL*S[mid-1-j]*power);
if(j < mid-1) power = mod(power*2);
}
}
else H = mod(2*(H - 1LL*S[i-1]*power) + S[i+mid-1]);
arr[i][i+mid-1] = H;
}
}
dp[0] = 1;
for(int i=0;i<=(L/2);i++)
{
for(int j=1;j<=L;j++)
{
L1 = i;
R1 = i + j - 1;
R2 = L-1-i;
L2 = R2-j+1;
if(L2<=R1) break;
issame = true;
if(arr[L1][R1]==arr[L2][R2])
{
if(s.size()==1)
{
dp[R1+1] += dp[i];
dp[R1+1]%=1000000007;
}
else
{
for(int k=0;k<j;k++)
{
if(S[L1+k]!=S[L2+k])
{
issame = false;
break;
}
}
if(issame)
{
dp[R1+1] += dp[i];
dp[R1+1]%=1000000007;
}
}
}
}
}
long long int res = 0;
for(int i=0;i<=(L/2);i++)
{
res += dp[i];
res%=(1000000007);
}
cout << res << '\n';
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0