【题解】ICPC焦作2018

% wxh

G和L好像在其他的博客,我分成专题的例题了。

K - Counting Failures on a Trie

比较经典的题目
就是问一个子串被拆分后trie的几个前缀匹配
注意这个trie只表示n个不同子串,每个节点表示一个,可以hash表存下来
然后预处理每个位置的匹配长度
查询用一个倍增维护
注意把倍增定义清楚:
我是定义失配2 i 到的位置。这个定义下直接合并没有问题。
边界的情况需要处理一下

注意hash表用时间戳清空
抄板子的时候不要和数据组数的T混了

#include<bits/stdc++.h>
using namespace std;

#define rep(i,l,r) for(register int i = l ; i <= r ; i++)
#define repd(i,r,l) for(register int i = r ; i >= l ; i--)
#define fore(i,x)for (register int i = head[x] ; i ; i = e[i].next)
#define forup(i,l,r) for (register int i = l ; i <= r ; i += lowbit(i))
#define fordown(i,id) for (register int i = id ; i ; i -= lowbit(i))
#define pb push_back
#define prev prev_
#define stack stack_
#define mp make_pair
#define fi first
#define se second
#define lowbit(x) ((x)&(-(x)))

typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair<int,int> pr;

const ld inf = 2e18;
const int maxn = 200020;
const ll mod = 360023843327831ll;
const ll base = 907;

const int M = 262143;
struct E{
   
	ll v; int id;
	E *nxt;
}*g[M + 1],pool[maxn],*cur = pool,*p;
int n,T,m,q,vis[M + 1];
int nxt[maxn][26],jump[20][maxn];
char ch[maxn];
ll h[maxn],pow_[maxn
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值