传送门:

  [1]:BZOJ

  [2]:洛谷

•题意

  求串 s 中出现的所有奇回文串,并按照长度由大到小排序;

  输出前 k 个奇回文串的乘积 mod 19930726;

  如果奇回文串的个数不足 k 个,输出 -1;

•题解

  将串 s 跑一边回文自动机;

  将求解出的 len,cnt 数组存入一个结构体中并按照 len 由大到小排序;

  将前 k 个奇回文串的长度相乘就行;

  记得用快速幂,并且只要奇回文串的长度乘积;

•Code

 #include<bits/stdc++.h>
using namespace std;
#define ll long long
const int MOD=;
const int maxn=1e6+; int n;
ll k;
char s[maxn]; struct PAM
{
int tot;
int last;
ll cnt[maxn];
ll len[maxn];
int fail[maxn];
int son[maxn][]; int newNode(int Len)
{
for(int i=;i < ;++i)
son[tot][i]=; len[tot]=Len;
fail[tot]=;
cnt[tot]=; return tot++;
}
int getFail(int p,int i)
{
while(s[i-len[p]-] != s[i])
p=fail[p];
return p;
}
void Init()
{
tot=;
last=; newNode();
newNode(-); fail[]=;
}
void Count()
{
for(int i=tot-;i >= ;--i)
cnt[fail[i]] += cnt[i];
}
void pam()
{
Init(); for(int i=;i <= n;++i)
{
s[i]=s[i]-'a'+; int cur=getFail(last,i); if(!son[cur][s[i]])
{
int now=newNode(len[cur]+);
fail[now]=son[getFail(fail[cur],i)][s[i]];
son[cur][s[i]]=now; }
cnt[last=son[cur][s[i]]]++;
}
Count();
}
}_pam;
struct Data
{
ll cnt;
ll len;
bool operator < (const Data &obj) const
{
return len > obj.len;
}
}a[maxn]; ll qPow(ll a,ll b,ll m)
{
ll ans=;
a %= m;
while(b)
{
if(b&)
ans=ans*a%m;
a=a*a%m;
b >>= ;
}
return ans;
}
int main()
{
scanf("%d%lld",&n,&k);
scanf("%s",s+);
s[]='#'; _pam.pam(); int x=;
for(int i=;i < _pam.tot;i++)
a[++x]=Data{_pam.cnt[i],_pam.len[i]}; sort(a+,a+x+); int index=;
ll ans=;
while(index <= x)
{
if(!(a[index].len&))///坑:如果不是奇回文串,continue
{
index++;
continue;
} ll cur=min(k,a[index].cnt); ans *= qPow(a[index++].len,cur,MOD);
ans %= MOD;
k -= cur; if(k == )
break;
}
if(k > )
ans=-; printf("%lld\n",ans);
}

最新文章

  1. mount --bind 重启后失效的解决办法
  2. iOS应用架构谈(二):View层的组织和调用方案(上)
  3. PHP学习(四)---PHP与数据库MySql
  4. jsp数据库连接出现乱码
  5. 自学php找工作【二】 PHP计算时间加一天
  6. SQL Server 事务处理 回滚事务
  7. poj 3468 A Simple Problem with Integers (线段树 成段更新 加值 求和)
  8. 要注意null合并运算符的优先级比+还要低
  9. JDK5-自动拆装箱
  10. C++学习笔记2——引用
  11. SMTP 553
  12. HTML+CSS - 搜索 And 高级搜索
  13. Python 字典和集合
  14. kafka单机安装和启动
  15. wxPython树控件
  16. Go语言strings和strconv包
  17. css 样式控制文本过长实现省略号
  18. java 基础类库之 SysFun
  19. 查看锁信息(开启InnoDB监控)
  20. 新版剑指offer14 剪绳子

热门文章

  1. python 基本数据结构 ndarray
  2. PHP小知识总结(1)
  3. 删除指定节点Remove Nth Node From End of List
  4. Hdu 2522 hash
  5. LeetCode172 Factorial Trailing Zeroes. LeetCode258 Add Digits. LeetCode268 Missing Number
  6. Python学习之路1☞简介及入门代码
  7. C/S和B/S交互 2016-03-19 11:27 1275人阅读 评论(30) 收藏
  8. Vue CLI图形化创建项目
  9. 【NS2】cygwin+NS2.29安装之道 (转载)
  10. LeetCode120 Triangle