【后缀自动机】 SPOJ SUBLEX
来源:互联网 发布:怎么修改手机游戏数据 编辑:程序博客网 时间:2024/05/18 00:04
这题也是CLJ论文上的题目,做法CLJ论文讲了。。。这里不多说了。。。。
#include <iostream>#include <queue> #include <stack> #include <map> #include <set> #include <bitset> #include <cstdio> #include <algorithm> #include <cstring> #include <climits>#include <cstdlib>#include <cmath>#include <time.h>#define maxn 200005#define maxm 100005#define eps 1e-7#define mod 1000000007#define INF 0x3f3f3f3f#define PI (acos(-1.0))#define lowbit(x) (x&(-x))#define mp make_pair#define ls o<<1#define rs o<<1 | 1#define lson o<<1, L, mid #define rson o<<1 | 1, mid+1, R#define pii pair<int, int>#pragma comment(linker, "/STACK:16777216")typedef long long LL;typedef unsigned long long ULL;//typedef int LL;using namespace std;LL qpow(LL a, LL b){LL res=1,base=a;while(b){if(b%2)res=res*base;base=base*base;b/=2;}return res;}LL powmod(LL a, LL b){LL res=1,base=a;while(b){if(b%2)res=res*base%mod;base=base*base%mod;b/=2;}return res;}// headstruct node{int len, cnt, vis;node *fa, *next[26];}pool[maxn], *last, *root;vector<int> ans;char s[maxn];int tot, m, k;node* newnode(int len){node *p = &pool[tot++];p->len = len, p->cnt = p->vis = 0, p->fa = 0;memset(p->next, 0, sizeof p->next);return p;}void init(){tot = 0;root = newnode(0);last = root;}void add(int c){node *p = last, *np = newnode(p->len + 1);last = np;for(; p && !p->next[c]; p = p->fa) p->next[c] = np;if(!p) np->fa = root;else {node *q = p->next[c];if(p->len + 1 == q->len) np->fa = q;else {node *nq = newnode(p->len + 1);*nq = *q;nq->len = p->len + 1;q->fa = np->fa = nq;for(; p && p->next[c] == q; p = p->fa) p->next[c] = nq;}}}void DFS(node *p){p->cnt = p->vis = 1;for(int i = 0; i < 26; i++) if(p->next[i]) {if(!p->next[i]->vis) DFS(p->next[i]);p->cnt += p->next[i]->cnt;}}void dfs(node *p){if(k <= 0) return;for(int i = 0; i < 26; i++) if(p->next[i]) {if(k > p->next[i]->cnt) k -= p->next[i]->cnt;else {ans.push_back('a' + i);k--;dfs(p->next[i]);break;}}}void read(){scanf("%s%d", s, &m);for(int i = 0; s[i]; i++) add(s[i] - 'a');}void work(){DFS(root);while(m--) {ans.clear();scanf("%d", &k);dfs(root);for(int i = 0; i < ans.size(); i++) printf("%c", ans[i]);printf("\n");}}int main(){init();read();work();return 0;}
0 0
- 【后缀自动机】 SPOJ SUBLEX
- SPOJ 7258 SUBLEX 后缀自动机
- SPOJ SUBLEX Lexicographical Substring Search 后缀自动机
- 【后缀自动机】[SPOJ SUBLEX]Lexicographical Substring Search
- SPOJ 7258 SUBLEX - Lexicographical Substring Search (后缀自动机)
- SPOJ 题目7528 SUBLEX - Lexicographical Substring Search(后缀自动机求排名k的子串)
- spoj7258 Lexicographical Substring Search(SUBLEX) 后缀自动机
- SPOJ SUBLEX
- SPOJ LCS --后缀自动机
- SPOJ LCS2 --后缀自动机
- SPOJ Substrings --后缀自动机
- 【后缀自动机】 SPOJ LCS
- 【后缀自动机】 SPOJ LCS2
- 【后缀自动机】 SPOJ NSUBSTR
- spoj LCS 【后缀自动机】
- spoj LCS2 【后缀自动机】
- spoj Substrings【后缀自动机】
- SPOJ LCS2 后缀自动机
- 【黑马程序员】oc中的NSManager文件操作
- HTML+CSS+JS实现选项卡
- 修改php.ini配置的几种方法
- AES算法256位密钥
- HDU 2608解题报告
- 【后缀自动机】 SPOJ SUBLEX
- 利用Spring-Data-Redis和Jedis操作Redis缓存
- 非UI线程更新UI界面的各种方法小结
- URAL 1880 Psych Up's Eigenvalues (技巧)
- spark 倒排索引
- 3年了
- HDU 2094 产生冠军
- LoadRunner教程01:性能测试常见用语
- 开发板通过NFS(网络文件系统)和虚拟机通讯