tjoi胆子好大,直接出了两道送分题......

都 9102 年了,还有省选出模板题QAQ......

Code:

#include <bits/stdc++.h>
#define setIO(s) freopen(s".in","r",stdin)
#define maxn 200010
using namespace std;
char str[maxn];
int n,C[maxn],rk[maxn],arr[maxn];
int dis[maxn],f[maxn],ch[maxn][30],last,tot,cnt[maxn];
void init() { last = tot = 1; }
void ins(int c){
int np = ++tot, p = last;
last = np, dis[np] = dis[p] + 1;
while(p && !ch[p][c]) ch[p][c] = np, p = f[p];
if(!p) f[np] = 1;
else {
int q = ch[p][c];
if(dis[q] == dis[p] + 1) f[np] = q;
else {
int nq = ++tot;
dis[nq] = dis[p] + 1;
memcpy(ch[nq],ch[q],sizeof(ch[q]));
f[np] = nq, f[nq] = f[q], f[q] = nq;
while(p && ch[p][c] == q) ch[p][c] = nq, p = f[p];
}
}
++cnt[np];
}
void work()
{
int k;
init();
scanf("%s%d",str + 1,&k), n = strlen(str + 1);
for(int i = 1;i <= n; ++i) ins(str[i] - 'a');
for(int i = 1;i <= tot; ++i) ++C[dis[i]];
for(int i = 1;i <= tot; ++i) C[i] += C[i - 1];
for(int i = tot;i >= 1; --i) rk[C[dis[i]]--] = i;
for(int i = tot;i >= 1; --i) {
int u = rk[i];
cnt[f[u]] += cnt[u];
if(cnt[u] == k)
{
arr[dis[f[u]] + 1] += 1;
arr[dis[u] + 1] -= 1;
}
}
int ans = 0, p = 0;
for(int i = 1;i <= tot; ++i) {
arr[i] += arr[i - 1];
if(arr[i] >= p && arr[i] != 0) ans = i, p = arr[i];
}
if(ans == 0)
printf("-1\n");
else
printf("%d\n",ans);
for(int i = 0;i <= tot; ++i)
{
for(int j = 0;j < 30; ++j) ch[i][j] = 0;
cnt[i] = C[i] = arr[i] = 0;
}
last = tot = 0;
}
int main()
{
// setIO("input");
int T;
scanf("%d",&T);
while(T--) work();
return 0;
}

  

Tjoi2019 甲苯先生和大中锋的字符串 后缀自动机_差分的更多相关文章

  1. [TJOI2019]甲苯先生和大中锋的字符串——后缀自动机+差分

    题目链接: [TJOI2019]甲苯先生和大中锋的字符串 对原串建后缀自动机并维护$parent$树上每个点的子树大小,显然子树大小为$k$的节点所代表的子串出现过$k$次,那么我们需要将$[len[ ...

  2. 洛谷P5341 [TJOI2019]甲苯先生和大中锋的字符串

    原题链接P5341 [TJOI2019]甲苯先生和大中锋的字符串 题目描述 大中锋有一个长度为 n 的字符串,他只知道其中的一个子串是祖上传下来的宝藏的密码.但是由于字符串很长,大中锋很难将这些子串一 ...

  3. 【题解】Luogu P5341 [TJOI2019]甲苯先生和大中锋的字符串

    原题传送门 实际按照题意模拟就行 我们先求出字符串的sa 因为要在字符串中出现k次,所以我们枚举\(l,r(r-l+1=k)\)看一共有多少种合法的方案 合法方案的长度下界\(lb\)为\(Max(h ...

  4. 【洛谷 P5341】 [TJOI2019]甲苯先生和大中锋的字符串(后缀自动机)

    题目链接 建出\(sam\),求出parent tree上每个点的\(endpos\)集合大小. 如果等于\(k\),说明到达这个点的都可以.给\((len[fa(i)],len[i]]\)的\(cn ...

  5. [TJOI2019]甲苯先生和大中锋的字符串

    有个叫asuldb的神仙来嘲讽我 说这题SAM水题,而且SA过不了 然后我就用SA过了 显然是一个Height数组上长为k的滑块,判一下两边,差分一下就可以了 #include"cstdio ...

  6. luogu P5341 [TJOI2019]甲苯先生和大中锋的字符串

    传送门 考虑子串以及出现个数,可以发现SAM可以快速知道每种子串的出现次数,即所在状态的\(endpos\)集合大小,然后一个状态对应的子串长度是一段连续区间,所以可以对每个状态差分一下,就能统计答案 ...

  7. p5341 [TJOI2019]甲苯先生和大中锋的字符串

    分析 TJOI白给题 建出sam,对于每个点如果它的子树siz和等于k 那么对于这个满足的点它有贡献的长度一定是一个连续区间 直接差分即可 代码 #include<bits/stdc++.h&g ...

  8. 模板—字符串—后缀自动机(后缀自动机+线段树合并求right集合)

    模板—字符串—后缀自动机(后缀自动机+线段树合并求right集合) Code: #include <bits/stdc++.h> using namespace std; #define ...

  9. bzoj3756pty的字符串(后缀自动机+计数)

    题目描述 题解 我们可以先对trie树建出广义SAM,然后维护一下right集合大小(注意right集合在广义SAM上的维护方式). 然后把匹配穿往广义SAM上匹配,假设现在匹配到了x节点,那么x的所 ...

随机推荐

  1. Codeforces 898D - Alarm Clock

    传送门:http://codeforces.com/contest/898/problem/D 有n个闹钟,第i(1≤i≤n)个闹钟将在第ai(1≤ai≤106)分钟鸣响,鸣响时间为一分钟.当在连续的 ...

  2. 【Codeforces 229B】Planets

    [链接] 我是链接,点我呀:) [题意] [题解] 设dis[i]表示到达i号传送器的最早时刻. 显然,虽然有那么多的出发时刻的限制,但我们还是越早到越好的. 因为你到得越早,出发的时间肯定不会比到达 ...

  3. (25)Spring Boot使用自定义的properties【从零开始学Spring Boot】

    spring boot使用application.properties默认了很多配置.但需要自己添加一些配置的时候,我们应该怎么做呢. 若继续在application.properties中添加 如: ...

  4. 关于Java特种兵下冊

    <Java特种兵 下冊>这本书一直没出.至上冊出版近1年以来,每周会有非常多小伙伴发私信或邮件问起我下冊出版的事情,纵使眼下有非常多无奈,小胖还是初步决定准备写下冊. 下冊内容(下冊的内容 ...

  5. Vultr好server不敢独享

    Vultr是一家美国2014年成立的新公司.瞬间红遍世界,他是干什么的?他是serverVPS(Virtual Private Server)提供商,这个价格真实惊人的廉价5美金/月.折合人民币30元 ...

  6. java 线程死锁的检测

    java 线程死锁的检测   例子程序: import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executo ...

  7. Mina airQQ聊天开门见山篇(一)

    Mina airQQ聊天开门见山篇(一) 近期项目可能要用到Mina,这个礼拜就在看这个框架,所以想写个小小的聊天的demo来巩固下,打算用几篇博客来记录下相关的知识 client用的是Flex Ai ...

  8. 64位只有一种调用约定stdcall

    procedure TForm2.Button1Click(Sender: TObject); function EnumWindowsProc(Ahwnd: hwnd; AlParam: lPara ...

  9. 消除ADB错误“more than one device and emulator”的方法

    当我连着手机充电的时候,启动模拟器调试,运行ADB指令时,报错. C:\Users\gaojs>adb shell error: more than one device and emulato ...

  10. AVL树、splay树(伸展树)和红黑树比较

    AVL树.splay树(伸展树)和红黑树比较 一.AVL树: 优点:查找.插入和删除,最坏复杂度均为O(logN).实现操作简单 如过是随机插入或者删除,其理论上可以得到O(logN)的复杂度,但是实 ...