题目传送门

题目大意: 给出 NNN 个字符串,求出每个字符串拥有多少个本质不同的且不被其他字符串包含的子串。

题解

广义后缀自动机裸题,造的时候标记一下包含前缀的状态属于哪个字符串,造出来之后把后缀链接树也造出来,假如一个状态的子树内的所有状态都属于同一个字符串,那么这个状态就只属于哪个字符串,加上他的贡献即可,假如子树内不是都属于同一个字符串,说明这个状态包含的子串在不同的字符串中出现过,就不可能提供贡献了。

代码如下:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define maxn 200010
#define ll long longint T,n,ans[maxn];
char s[maxn];
struct state{int len,link,next[26],belong;
}st[maxn];
int id=0,last,now,p,q;
void extend(int x,int be)
{now=++id;st[now].len=st[last].len+1;st[now].belong=be;for(p=last;p!=-1&&!st[p].next[x];p=st[p].link)st[p].next[x]=now;if(p!=-1){q=st[p].next[x];if(st[p].len+1==st[q].len)st[now].link=q;else{int clone=++id;st[clone]=st[q];st[clone].len=st[p].len+1;for(;p!=-1&&st[p].next[x]==q;p=st[p].link)st[p].next[x]=clone;st[q].link=st[now].link=clone;}}last=now;
}
struct edge{int y,next;};
edge e[maxn];
int first[maxn],len=0;
void buildroad(int x,int y){e[++len]=(edge){y,first[x]};first[x]=len;}
void dfs(int x)
{for(int i=first[x];i;i=e[i].next){dfs(e[i].y);if(!st[x].belong)st[x].belong=st[e[i].y].belong;else if(st[x].belong!=st[e[i].y].belong)st[x].belong=-1;}if(st[x].belong!=-1)ans[st[x].belong]+=st[x].len-st[st[x].link].len;
}int main()
{scanf("%d",&T);st[0].link=-1;for(int j=1;j<=T;j++){scanf("%s",s+1);n=strlen(s+1);last=0;for(int i=1;i<=n;i++)extend(s[i]-'a',j);}for(int i=1;i<=id;i++)buildroad(st[i].link,i);dfs(0);for(int i=1;i<=T;i++)printf("%d\n",ans[i]);
}

USACO 17DEC Standing Out from the Herd P 题解相关推荐

  1. [USACO17DEC]Standing Out from the Herd

    去年暑假做过,那时候只会打暴搜,被高中奆佬吊打. 后缀自动机万岁,再也不管后缀数组这辣鸡东西了 一.题目 点此看题 二.解法 本题需要用到一个知识点:广义Sam\text{Sam}Sam,其实也没有多 ...

  2. 【SAM】BZOJ5137 [Usaco2017 Dec] Standing Out from the Herd

    [题目] lydsy 给定 n n n个字符串,对于每个字符串,问只在这个字符串中出现的子串有多少个. n , ∑ ∣ S ∣ ≤ 1 0 5 n,\sum|S|\leq 10^5 n,∑∣S∣≤10 ...

  3. USACO 2022 December Contest, BronzeProblem 1. Cow College 题解

    以下是2022年-2023年USACO赛季第一个月的青铜组第一题,可以使用"计数数组+打擂台找最值"的思想,需要考生掌握一点算法才能通关.文章引用了官网题面,提供思考思路和代码,代 ...

  4. USACO 2021 January Contest, BronzeProblem 3. Just Stalling题解

    题目描述 Farmer John 有 N 头奶牛(1≤N≤20),高度为 a1-aN.他的牛栏有 N 个牛棚,高度限制分别为b1-bN(例如,如果 b5=17,那么一头高度不超过 17 的奶牛可以住在 ...

  5. USACO training 2.4.5 Fractions to Decimals题解

    嗯...用到一个定理,对于一个最简分数n/d,d=(2^x)*(5^y)*m,m≠1,那么其循环节长度为使10^L mod m==1的最小的L,不循环长度为max(x,y) 然后这题就没什么了.. 7 ...

  6. USACO 2020 December Contest, BronzeProblem 2. Daisy Chains题解

    题目描述: 每天,作为她绕农场行走的一部分,奶牛 Bessie 会经过她最喜爱的草地,其中种有 N 朵花(五颜六色的雏菊),编号为1-N(1≤N≤100),排列成一行.花 i 有 pi 朵花瓣(1≤p ...

  7. USACO 2021 January Contest, BronzeProblem 3. Just Stalling题解 贪心 排序

    已经鸽了好久了写一篇题解把 题目描述 Farmer John 有N头奶牛(1≤N≤20),高度为a1-aN.他的牛栏有N个牛棚,高度限制分别为b1-bN(例如,如果b5=17,那么一头高度不超过17的 ...

  8. 【USACO 2018 December Bronze】The Bucket List题解

    题目描述 Farmer John正在考虑改变他给奶牛挤奶的时候分配牛奶桶的方式.他认为这最终能使得他使用数量更少的桶,然而他不清楚具体是多少.请帮助他! Farmer John有N头奶牛(1≤N≤10 ...

  9. USACO 4.4.2 Pollutant Control追查坏牛奶 题解与分析

    Pollutant Control追查坏牛奶 译 by Twink 描述 你第一天接手三鹿牛奶公司就发生了一件倒霉的事情:公司不小心发送了一批有三聚氰胺的牛奶.很不幸,你发现这件事的时候,有三聚氰胺的 ...

最新文章

  1. Servlet初始化与异步支持
  2. [Angularjs]ng-repeat中使用ng-model遇到的问题
  3. 剑桥大学工程硕士的安排
  4. 莱斯信道衰落下的QPSK误码率分析
  5. 全排列函数next_permutation
  6. java作业 计算平均分和总成绩
  7. Deep Learning资源搜集
  8. Bootstrap模态框如何垂直居中?
  9. 老板子华硕A7N8X-X
  10. Cameralink转万兆光纤视频模块
  11. js移除某个样式_JS removeAttribute()方法:删除元素的某个属性
  12. 21cn邮箱服务器端,21CN 免费邮箱常见问题
  13. word2016安装mathtype之后工具栏无显示
  14. 超级表格的高级使用者都在用视图做些什么?
  15. 使用Spring Boot + Resilience 4j实现断路器
  16. 联想拯救者R7000P2021安装Ubuntu双系统
  17. bilibili视频下载 (node.js)
  18. 牛客AI模拟面试1测开岗
  19. Socket套接字(Java)
  20. 机器学习 RBF神经网络

热门文章

  1. p8z77-v le plus 黑苹果_iOS13隐藏dock栏壁纸 iPhone12刘海收窄 苹果或还准备了SE Plus
  2. [转]SATA电源线和数据线接口定义
  3. HP 3PAR 8440存储更换故障硬盘
  4. geogebra 在线公式绘图, 支持3d
  5. 革命路-互联网女皇看好的革命性创业公司
  6. 基于win10计划任务运行ps1脚本
  7. 中国最好的一些源码下载站点排名
  8. ​在Windows环境下下安装Kafka​
  9. 如何查看计算机的cpu型号,怎么看电脑处理器型号
  10. IIC总线式驱动开发(mpu6050)