正题

题目链接:https://ac.nowcoder.com/acm/contest/20110/D


题目大意

求一个长度为nnn的字符串的所有子串的borderborderborder长度和。

1≤n≤1051\leq n\leq 10^51≤n≤105


解题思路

考虑到两个相同的子串会作为一个子串的borderborderborder,所以问题可以变为求所有相同子串对的长度之和。

然后直接跑出SAMSAMSAM然后对于每个节点统计它在字符串里的出现次数,然后所有的lenfa+1∼lenxlen_{fa+1}\sim len_xlenfa+1​∼lenx​都是这个节点的字符串长度,用过等比序列求和就好了。

时间复杂度:O(n)O(n)O(n)(不算快速排序)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=2e5+10;
ll n,cnt,last,ans,p[N],len[N],fa[N],c[N],ch[N][26];
char s[N];
void Insert(char c){ll p=last,np=last=++cnt;len[np]=len[p]+1;for(;!ch[p][c];p=fa[p])ch[p][c]=np;if(!p)fa[np]=1;else{ll q=ch[p][c];if(len[p]+1==len[q])fa[np]=q;else{ll nq=++cnt;len[nq]=len[p]+1;memcpy(ch[nq],ch[q],sizeof(ch[nq]));fa[nq]=fa[q];fa[q]=fa[np]=nq;for(;ch[p][c]==q;p=fa[p])ch[p][c]=nq;}}return;
}
bool cmp(ll x,ll y)
{return len[x]>len[y];}
ll calc(ll l,ll r){if(!r)return 0;return (r+l)*(r-l+1)/2;
}
signed main()
{scanf("%lld",&n);scanf("%s",s+1);cnt=last=1;for(ll i=1;i<=n;i++)Insert(s[i]-'a'),c[last]++;for(ll i=1;i<=cnt;i++)p[i]=i;sort(p+1,p+1+cnt,cmp);for(ll i=1;i<=cnt;i++)c[fa[p[i]]]+=c[p[i]];for(ll i=1;i<=cnt;i++){ll w=calc(len[fa[i]]+1,len[i]);ans+=calc(1,c[i]-1)*w;}printf("%lld\n",ans);return 0;
}

2021牛客OI赛前集训营-提高组(第五场)D-牛牛的border【SAM】相关推荐

  1. 2021牛客OI赛前集训营-提高组(第五场)C-第K排列【dp】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/20110/C 题目大意 一个长度为nnn的字符串SSS,SSS中存在一些???,有N/O/I/PN/O/I/P ...

  2. 2021牛客OI赛前集训营-提高组(第四场) T2空间跳跃

    2021牛客OI赛前集训营-提高组(第四场) 题目大意 给你三个整数 n , d , l n,d,l n,d,l, n n n为正整数.负整数或0, d , l d,l d,l为正整数,你现在有一个数 ...

  3. 2020牛客NOIP赛前集训营-提高组(第一场) T2 牛牛的猜球游戏

    题目链接: 牛客原站 通过记录: 题目链接2:T277380 牛牛的猜球游戏(被我们搬到洛谷力): 洛谷搬运 题目描述   有十个数 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ...

  4. 【2020牛客NOIP赛前集训营-提高组(第一场)题解】( 牛牛的方程式,牛牛的猜球游戏,牛牛的凑数游戏,牛牛的RPG游戏)

    未完待续... T1:牛牛的方程式 title solution code T2:牛牛的猜数游戏 title solution code T3:牛牛的凑数游戏 title solution code ...

  5. 【2020牛客NOIP赛前集训营-提高组(第二场)】题解(GCD,包含,前缀,移动)

    文章目录 T1:GCD title solution code T2:包含 title solution code(正解code补充在上面了) T3:前缀 title solution code T4 ...

  6. 2020牛客NOIP赛前集训营-提高组(第三场)C-牛半仙的妹子Tree【虚树,最短路】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/7609/C 题目大意 给出nnn个点的一棵树,mmm个时刻各有一个操作 标记一个点,每个点被标记后的每一个时刻 ...

  7. 2020牛客NOIP赛前集训营-提高组(第六场)A-袜子分配【组合数学,结论】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/7615/A?&headNav=acm&headNav=acm 题目大意 nnn对颜色一样的袜子 ...

  8. 2020牛客NOIP赛前集训营提高组(第四场)B-色球【链表】

    正题 题目链接:https://ac.nowcoder.com/acm/contest/7611/B 题目大意 nnn个杯子,mmm个操作 在第zzz个杯子中依次加入xxx个颜色为yyy的球 在第yy ...

  9. 2020牛客NOIP赛前集训营-普及组第三场C牛半仙的妹子树

    链接:https://ac.nowcoder.com/acm/contest/7608/C 来源:牛客网 牛半仙有 n​ 个妹子,她们所在的位置组成一棵树,相邻两个妹子的距离为 1​. 有 m​ 个妹 ...

最新文章

  1. C. 奇奇怪怪的魔法阵(未搞懂)
  2. php odbc驱动,用于Windows的PHP 7.0 ODBC驱动程序
  3. Qt|OpenGL-天空盒子的创建
  4. 前端开发的瓶颈与未来
  5. dual mysql 获取序列_如何获取 MySQL 插入数据的自增 ID
  6. vue中安装axios
  7. GPS数据格式的分析与处理
  8. 软件设计师--中级 学习笔记(2)
  9. 全网最快的网络服务器是什么,最好用最快的首选 DNS 服务器地址设置 (电信/联通/移动)...
  10. AT070TN83调试总结(时序)
  11. RecyclerView 官方分割线
  12. OpenGL(五)立体图形
  13. php的外文参考文献_php英文文献翻译及参考文献
  14. 分布式--生成数据库全局唯一ID--方法/方案
  15. Unity 3D中的射线与碰撞检测
  16. 烂泥:利用PhotoShop自定义艺术字体
  17. asp.net(c#)文件生成HTML文件
  18. 零基础入门Jetson Nano——MediaPipe双版本(CPU+GPU)的安装与使用
  19. 推荐:linux下的搜狗拼音输入法——scim-python
  20. zt: 男人必听十大歌曲

热门文章

  1. sqlyog怎么设置默认值_物联网卡三网APN设置
  2. oracle cpu 100%原因,oracle 12.1 cpu 100%
  3. php 类中调用另类,PHP return语句另类用法不止是在函数中,return语句_PHP教程
  4. 道德经和译文_老子《道德经》第九章原文、注释、译文、导读及解析(收藏版)...
  5. c#程序设计教程 唐大仕pdf_C# 添加PDF水印
  6. JAVA world转图片,将Kinect深度图像转换为真实世界坐标
  7. python网页动图_python,tensorflow线性回归Django网页显示Gif动态图
  8. android虚线边框_Android实现代码画虚线边框背景效果
  9. db2 删除存储过程_蚂蚁金服OceanBase挑战TPCC | TPCC基准测试之存储优化
  10. [剑指offer]面试题5:从尾到头打印链表