bzoj 3998 [TJOI2015]弦论
来源:互联网 发布:计算机四级有用吗 知乎 编辑:程序博客网 时间:2024/04/30 09:28
资瓷点此阅读QvQ
先扯几句
昨天tc怎么都上不去,突然想再补补姿势,然后发现SAM这个东西理解的很不到位,花了一晚上重新理解了一下,做了下题来回顾下>_<_
Description
对于一个给定长度为
第二行为两个整数
Solution
很容易想到用SAM做,
最后
Code
#include <bits/stdc++.h>using namespace std;const int N = 500005 * 2, M = 26;struct SAM { int tot, last, step[N], g[N], par[N], son[N][M], cnt[N], Q[N], ch[N], f[N]; void init() { tot = last = 0; memset(par, 0, sizeof(par)); par[0] = -1; memset(son, 0, sizeof(son)); } void add(int x) { int p = last, np = ++tot; step[np] = step[p] + 1, last = np, ++g[np];//right ch[np] = x; for (; !son[p][x] && ~p; p = par[p]) son[p][x] = np; if (p == -1) return; int q = son[p][x]; if (step[q] == step[p] + 1) par[np] = q; else { step[++tot] = step[p] + 1; ch[tot] = x; int nq = tot; memcpy(son[nq], son[q], sizeof(son[q])); par[nq] = par[q]; par[np] = par[q] = nq; for (; son[p][x] == q && ~p; p = par[p]) son[p][x] = nq; } } void topo() { for (int i = 1; i <= tot; ++i) ++cnt[step[i]]; for (int i = 1; i <= tot; ++i) cnt[i] += cnt[i - 1]; for (int i = 1; i <= tot; ++i) Q[cnt[step[i]]--] = i; } void gao(int t) { for (int i = tot; i >= 0; --i) { if(t == 0) g[Q[i]] = 1; else g[par[Q[i]]] += g[Q[i]]; f[Q[i]] = g[Q[i]]; for (int j = 0; j < 26; ++j) f[Q[i]] += f[son[Q[i]][j]]; } }}S;char s[N];int main() { scanf("%s", s); S.init(); int l = strlen(s); for (int i = 0; i < l; ++i) S.add(s[i] - 'a'); S.topo(); int t, k; scanf("%d%d", &t, &k); S.gao(t); int rt = 0, sum = 0; for (int i = 0; i < 26; ++i) sum += S.f[S.son[0][i]]; if (k > sum) puts("-1"); else { while (k) { for (int i = 0; i < 26; ++i) if (S.son[rt][i]) { if (S.f[S.son[rt][i]] >= k) { printf("%c", 'a' + i); k -= S.g[S.son[rt][i]]; rt = S.son[rt][i]; break; } else k -= S.f[S.son[rt][i]]; } } } return 0;}
0 0
- bzoj 3998: [TJOI2015]弦论
- bzoj 3998 [TJOI2015]弦论
- BZOJ 3998 [TJOI2015]弦论
- bzoj 3998 [TJOI2015]弦论
- BZOJ 3998 TJOI2015 弦论 后缀自动机
- BZOJ 3998 TJOI2015 弦论 后缀自动机
- 【后缀自动机】 BZOJ 3998: [TJOI2015]弦论
- bzoj 3998: [TJOI2015]弦论 (后缀自动机)
- bzoj 3998: [TJOI2015]弦论 后缀自动机
- BZOJ 3998 [TJOI2015]弦论 后缀数组
- [BZOJ]3998 [TJOI2015] 弦论 后缀自动机
- BZOJ 3998 [TJOI2015]弦论【后缀自动机(总结+安利
- bzoj 3998 [TJOI2015]弦论 后缀数组||后缀自动机
- 3998: [TJOI2015]弦论
- [K大子串 后缀自动机 模板题] BZOJ 3998 [TJOI2015]弦论
- BZOJ 3996: [TJOI2015]线性代数
- BZOJ 4001[TJOI2015]概率论
- [BZOJ 3996][TJOI2015]线性代数
- MySQL 存储过程之游标
- 第十三周项目1-Prim算法验证
- gradle 上传repo with sources & javadoc
- Jeecg平台扩展性不好的地方收集启动。
- CSS3 圆角(border-radius)
- bzoj 3998 [TJOI2015]弦论
- 第13周上机实践项目- 验证算法(1)Prim算法的验证
- 第十二周 项目4-利用遍历思想求解图问题(1)
- oracle 日志文件组六种状态
- css文字超出显示...
- java+uiautomator 打包运行
- 利用第3方开源框架 Volley ,实现图片,网站源码的加载
- 网站用户异步登录时出现特殊符号丢失
- Unix环境编程------Unix编程实例------进程组&&会话