题目链接

题意

一个字符串,求有多少对(S,T)(S,T)(S,T),满足S、TS、TS、T是回文串,S是T的子串S是T的子串S是T的子串

思路

题解还没看懂…
看大佬代码,好多在回文树上dfsdfsdfs
sz[i]sz[ i ]sz[i]表示nex往下能走多少,节点iii左右能加多少字符串
c[i]c[ i ]c[i]表示fail向上能走多少,节点iii有多少后缀相同的回文串
sz[i]×c[i]sz[i]×c[i]sz[i]×c[i]就是节点iii对答案的贡献

#include <bits/stdc++.h>
#define endl '\n'
const int maxn = 1e5 + 5;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + 7;
using namespace std;
struct Palindrome_Tree{int nex[maxn][26];int fail[maxn], cnt[maxn], num[maxn]; // num 记录每个节点右端点的表示回文串的个数int len[maxn], S[maxn];                 // cnt 记录每个节点表示的回文串出现的次数int last, n, p;int sz[maxn], c[maxn], vis[maxn];int newnode(int l) { // 新建节点for (int i = 0; i < 26; ++i) nex[p][i] = 0;cnt[p] = num[p] = 0;len[p] = l;return p++;}void init() { // 初始化p = 0;newnode(0), newnode(-1); // 新建奇根和偶根last = n = 0;S[n] = -1;fail[0] = 1; // 偶根指向}int get_fail(int x) { // 求failwhile (S[n - len[x] - 1] != S[n]) x = fail[x];return x;}void add(int c) { // 添加节点c -= 'a';S[++n] = c;int cur = get_fail(last);if (!nex[cur][c]) {int now = newnode(len[cur] + 2);fail[now] = nex[get_fail(fail[cur])][c];nex[cur][c] = now;num[now] = num[fail[now]] + 1;}last = nex[cur][c];cnt[last]++;}void count() { // 求cntfor (int i = p - 1; i >= 2; --i) cnt[fail[i]] += cnt[i];}int dfs(int u) {sz[u] = 1;c[u] = 0;for (int t = u; !vis[t] && t > 1; t = fail[t]) {vis[t] = u;c[u]++;}for (int i = 0; i < 26; ++i) {if (nex[u][i] == 0) continue;sz[u] += dfs(nex[u][i]); }for (int t = u; vis[t] == u && t > 1; t = fail[t]) {vis[t] = 0;}return sz[u];}long long solve() {dfs(0), dfs(1);long long ans = 0;for (int i = 2; i < p; ++i) {ans += 1ll * sz[i] * c[i];}return ans - p + 2;}
}Tree;
char s[maxn];
int main() {ios::sync_with_stdio(0);cin.tie(0), cout.tie(0);int T, Case = 1;scanf("%d", &T);while (T--) {scanf("%s", s);Tree.init();for (int i = 0; s[i]; ++i) {Tree.add(s[i]);}printf("Case #%d: %lld\n", Case++, Tree.solve());}return 0;
}

2019牛客暑期多校训练营(第六场)C - Palindrome Mouse (回文树dfs)相关推荐

  1. 【2019牛客暑期多校训练营(第二场)- F】Partition problem(dfs,均摊时间优化)

    题干: 链接:https://ac.nowcoder.com/acm/contest/882/F 来源:牛客网 Given 2N people, you need to assign each of ...

  2. 2019牛客暑期多校训练营(第九场)H-Cutting Bamboos(主席树)

    题意:n个竹子,有高度,q次询问,询问之间是独立的,每次查询输入l,r,x,yl,r,x,yl,r,x,y代表砍区间[l,r][l,r][l,r]内的竹子砍y次,最后一次要砍成0,每次砍掉的总长度相同 ...

  3. 【2019牛客暑期多校训练营(第二场) - H】Second Large Rectangle(单调栈,全1子矩阵变形)

    题干: 链接:https://ac.nowcoder.com/acm/contest/882/H 来源:牛客网 题目描述 Given a N×MN \times MN×M binary matrix. ...

  4. 2019牛客暑期多校训练营(第一场)E-ABBA(dp)

    链接:https://ac.nowcoder.com/acm/contest/881/E 来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 524288K,其他语言1048 ...

  5. 2019牛客暑期多校训练营(第一场)

    传送门 参考资料: [1]:官方题解(提取码:t050 ) [2]:标程(提取码:rvxr ) [3]:牛客题解汇总 A.Equivalent Prefixes(单调栈) •题意 定义两个数组 u,v ...

  6. 2019牛客暑期多校训练营(第一场) A Equivalent Prefixes ( st 表 + 二分+分治)

    链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Equivalent Prefixes 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/ ...

  7. 【2019牛客暑期多校训练营(第二场)- E】MAZE(线段树优化dp,dp转矩阵乘法,线段树维护矩阵乘法)

    题干: 链接:https://ac.nowcoder.com/acm/contest/882/E?&headNav=acm 来源:牛客网 Given a maze with N rows an ...

  8. 【2019牛客暑期多校训练营(第二场) - D】Kth Minimum Clique(bfs,tricks)

    题干: 链接:https://ac.nowcoder.com/acm/contest/882/D 来源:牛客网 Given a vertex-weighted graph with N vertice ...

  9. 【2019牛客暑期多校训练营(第一场) - A】Equivalent Prefixes(单调栈,tricks)

    题干: 链接:https://ac.nowcoder.com/acm/contest/881/A 来源:牛客网 Two arrays u and v each with m distinct elem ...

  10. 【2019牛客暑期多校训练营(第一场) - H】XOR(线性基,期望的线性性)

    题干: 链接:https://ac.nowcoder.com/acm/contest/881/H 来源:牛客网 Bobo has a set A of n integers a1,a2,-,ana1, ...

最新文章

  1. 开源分布式中间件 DBLE Schema.xml 配置解析
  2. OD调试9—实例:深入分析代码完成软件破解
  3. 如何掌握平面设计中的减法思维
  4. 单调栈之Next Greater Number
  5. 年会聚会派对邀请海报素材模板,创意和心意缺一不可
  6. 查询各个商品分类中各有多少商品的SQL语句
  7. 全国计算机三级数据库技术
  8. 新手的神奇bug——ImportError: cannot import name XXX
  9. (Research)肝肿瘤免疫微环境亚型和中性粒细胞异质性
  10. NLP炼丹技巧:标签平滑label smoothing
  11. qq文件对方接收后一定会有提示吗_QQ接收别人发的文件怎么设置不弹出接收信息...
  12. Python调用百度API进行语音识别
  13. 中兴机顶盒刷机后服务器连接失败,(四川高安)中兴ba860av2.1t强刷安卓固件包解决刷机到7出错问题...
  14. 在这个薄情的世界里深情的活这
  15. PID闭环底盘调试记录
  16. 安全管家安卓_飞鸟清理管家app下载-飞鸟清理管家官方版下载v1.0.5
  17. 点击劫持漏洞修复(前端、后端)
  18. 2021爱智先行者—记录一次 Spirit 1 和 IoT Pi 开发板的实战经历
  19. 关于 imtra-mart 的 新研究
  20. python动图爱心表白_python 表白-爱心

热门文章

  1. MongoDB数据导入hbase + 代码
  2. 计算机科学概论1,《计算机科学导论1》.docx
  3. [译] APT分析报告:03.OpBlueRaven揭露APT组织Fin7/Carbanak(上)Tirion恶意软件
  4. iOS逆向之深入解析如何使用Theos开发插件
  5. 【数据结构与算法】之深入解析运用链表结构计算“两数相加”的算法实现
  6. HarmonyOS之深入解析NFC的功能和使用
  7. EduCoder Linux文件/目录高级管理二
  8. 2019/Province_C_C++_A/B/数列求值
  9. 【Git1】指令,分支,ssh免密登录
  10. 【STM32】窗口看门狗相关类型和函数