1 Star 0 Fork 0

FlyingBird7160/code-repository

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
BZOJ4212 1.85 KB
一键复制 编辑 原始数据 按行查看 历史
#include <bits/stdc++.h>
using namespace std;
const int MAXN=2000005;
int n, m;
char s[MAXN], t[MAXN];
int trie[MAXN][26], tot=1;
int L[MAXN], R[MAXN], num;
int mark[MAXN], pos[MAXN];
int fa[MAXN], val[MAXN];
struct Persistent_Trie{
int sum, ch[26];
}tr[MAXN];
int rt[MAXN], cnt;
void add(int &cur, int pre, int now, int v) {
cur=++cnt;
tr[cur]=tr[pre];
tr[cur].sum+=v;
if (now==1) return;
add(tr[cur].ch[val[now]], tr[pre].ch[val[now]], fa[now], v);
}
int ask(int cur, int now) {
if (now==0) return tr[cur].sum;
if (tr[cur].ch[t[now]-'a']) return ask(tr[cur].ch[t[now]-'a'], now-1);
return 0;
}
void dfs(int x) {
// cout << x << endl;
L[x]=++num;
pos[num]=x;
for (int i=0; i<26; i++) {
if (trie[x][i]) {
fa[trie[x][i]]=x;
val[trie[x][i]]=i;
dfs(trie[x][i]);
}
}
R[x]=num;
}
int main() {
scanf("%d", &n);
for (int i=1; i<=n; i++) {
scanf("%s", s+1);
int len=strlen(s+1);
int p=1;
for (int j=1; j<=len; j++) {
if (!trie[p][s[j]-'a']) trie[p][s[j]-'a']=++tot;
p=trie[p][s[j]-'a'];
}
mark[p]++;
}
dfs(1);
for (int i=1; i<=num; i++) {
if (mark[pos[i]]) {
// cout << pos[i] << endl;
add(rt[i], rt[i-1], pos[i], mark[pos[i]]);
} else {
rt[i]=rt[i-1];
}
}
scanf("%d", &m);
int ans=0;
for (int T=1; T<=m; T++) {
scanf("%s%s", s+1, t+1);
int len1=strlen(s+1), len2=strlen(t+1);
for (int i=1; i<=len1; i++) s[i]=(s[i]-'a'+ans)%26+'a';
// for (int i=1; i<=len1; i++) cout << s[i];
// cout << endl;
for (int i=1; i<=len2; i++) t[i]=(t[i]-'a'+ans)%26+'a';
int p=1;
bool flag=true;
for (int i=1; i<=len1; i++) {
if (trie[p][s[i]-'a']) p=trie[p][s[i]-'a'];
else {
flag=false;
break;
}
}
if (!flag) {
printf("%d\n", ans=0);
} else {
printf("%d\n", ans=ask(rt[R[p]], len2)-ask(rt[L[p]-1], len2));
}
}
return 0;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/FlyingBird7160/code-repository.git
git@gitee.com:FlyingBird7160/code-repository.git
FlyingBird7160
code-repository
code-repository
master

搜索帮助