#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6 + 10;
char s[N << 1];
int f[N << 1], mp[N << 1];
const int mod = 19930726;
int ksm(int a, int b, int c) {
if (!b) return 1;
int ans = ksm(a, b >> 1, c);
ans = ans * ans % c;
if (b & 1) ans = ans * a % c;
return ans;
}
void manacher()
{
int n, k;
cin >> n >> k;
scanf ("%s", s + 1);
int l = strlen(s + 1);
int nowmid = 1, nowr = 1;
for (int i = 1; i <= l; i ++)
{
f[i] = 1;
if (i <= nowr)
f[i] = min(f[nowmid * 2 - i], nowr - i);
while (i - f[i] >= 0 && i + f[i] <= l && s[i - f[i]] == s[i + f[i]])
f[i] ++; // 进行暴力
if (i + f[i] - 1 > nowr)
nowmid = i, nowr = i + f[i];
mp[f[i] * 2 - 1] ++;
}
int ans = 1, sum = 0;
if (n % 2 == 0)
n --;
for (int i = n; i; i -= 2)
{
sum += mp[i];
if (k < sum)
{
(ans *= ksm(i, k, mod)) %= mod;
break;
}
(ans *= ksm(i, sum, mod)) %= mod; k -= sum;
}
cout << ans << '\n';
}
signed main()
{ manacher(); }
洛谷 P1659【manacher】【快速幂】
最新推荐文章于 2025-02-17 21:48:17 发布
关键词由优快云通过智能技术生成