当前位置: 首页 > news >正文

女生做网站前端设计师/成都网站建设seo

女生做网站前端设计师,成都网站建设seo,郴州专业seo,腾讯云做网站教程题目链接 题目描述 给定n个字符串,给m个前缀后缀,问这样的前缀后缀在字符串中出现的次数。 解题思路 字典树问题,静态数组构建字典树。动态会爆TLE。 建树步骤:首先说一下树的数据结构:cnt:表示这样的前…

题目链接

题目描述

给定n个字符串,给m个前缀后缀,问这样的前缀后缀在字符串中出现的次数。

解题思路

字典树问题,静态数组构建字典树。动态会爆TLE。
建树步骤:首先说一下树的数据结构:cnt:表示这样的前缀有多少种。nu数组:存放这样的前后缀有匹配的字符长度,作用就是排除前后缀长度大于字符串长度。接着就是常规的nex二维数组,建树专用。然后再说一下字符串的处理。给定字符串 如cde -> ceddec ,两个指针分别指向字符的首和尾然后一个向前,一个向后延伸。这样建树可以对给定的前缀后缀处理后就可以直接查询。
对前缀后缀处理:和建树类似,也是首尾两两结合,如不足补'*'ce f -> cfe*
这样对字符处理后,就变成普通的查询了。注意如果再查询中遇到了’*’,需要对该节点的所有情况都考虑一下。

难点解析

  • 给处理后的字符可能现字符长度小于前后缀的长度和,这种情况是不符合的。
  • 对遇到*号的处理。需要把*的所有情况的进行考虑。

代码部分

#include <bits/stdc++.h>
using namespace std;
const int maxn = 5e5 + 10;
int nex[maxn << 1][26];//用来构建字典树,表明下个节点
int cnt[maxn << 1]; // 用来存放该前缀后缀经过的次数。
vector <int> nu[maxn << 1]; //存该前缀后缀的字符长度。
int top, root;
/// 字母转换为数字
inline int idx(char c)
{return c - 'a';
}
///建树需要转换的字符串
inline string Idx(string c)
{string s = "";for(int i = 0, j = c.size() - 1; i < c.size(); ++ i, -- j){char c1 = c[i], c2 = c[j];s += c1, s += c2;}return s;
}
///查前后缀需要转换的字符串
inline string IDX(string c1, string c2)
{string s = "";int len1 = c1.size(), len2 = c2.size();reverse(c2.begin(), c2.end());int len = max(len1, len2);for(int i = 0; i < len; ++ i){char c;if(i + 1 > len1)s += '*';elsec = c1[i], s += c;if(i + 1 > len2)s += '*';elsec = c2[i], s += c;}return s;
}
///添加字典树节点
inline int CreatTrie()
{for(int i = 0; i < 26; ++ i) nex[top][i] = 0;cnt[top] = 0;return top ++;
}
///初始化字典树
inline void Init()
{top = 0;memset(nex, 0, sizeof(nex));for(int i = 0; i < 2 * maxn; ++ i) nu[i].clear();root = CreatTrie();
}
///插入字符串建树
void Insert(string c)
{int len = c.size();int now = root;for(int i = 0; i < len; ++ i){int temp = idx(c[i]);if(!nex[now][temp]){nex[now][temp] = CreatTrie();}now = nex[now][temp];nu[now].push_back(len / 2);cnt[now] ++;}
}
///对节点所包含的字符长度进行排序
void dfs(int x)
{sort(nu[x].begin(),nu[x].end());for(int i = 0; i < 26; ++ i)if(nex[x][i]) dfs(nex[x][i]);
}
int main()
{ios::sync_with_stdio(false);int t;cin >> t;while(t --){int m, n;string s;cin >> m >> n;Init();for(int i = 1; i <= m; ++ i){cin >> s;Insert(Idx(s));}dfs(0);while(n --){string s1, s2;cin >> s1 >> s2;int ret = s1.size() + s2.size();s = IDX(s1, s2);queue <int> Q[2];int tmp = 0;Q[tmp].push(0);int ans = 0;for(int i = 0; i < s.size(); ++ i){tmp = 1-tmp;int id = idx(s[i]);while(!Q[1-tmp].empty()){int now = Q[1-tmp].front();Q[1-tmp].pop();if(s[i] == '*'){for(int j = 0; j < 26; ++ j){if(nex[now][j]){Q[tmp].push(nex[now][j]);}}}else{if(nex[now][id]){Q[tmp].push(nex[now][id]);}}}}while(!Q[tmp].empty()){int now = Q[tmp].front();Q[tmp].pop();int temp = lower_bound(nu[now].begin(),nu[now].end(),ret) - nu[now].begin();ans -= temp;ans += cnt[now];}printf("%d\n",ans);}}return 0;
}
http://www.jmfq.cn/news/5059891.html

相关文章:

  • 1369免费版街景地图/seo优化技术
  • 动态网站开发流程是什么/免费网页制作网站
  • 自己做网站的流程下载/seo服务外包费用
  • 可以做家教的网站有哪些/外贸网站推广方法之一
  • l临沂建设工程信息网站/竞价推广网络推广运营
  • 网站建设的费用结构/百度app安装下载
  • vs做网站好不好/百度广告推广电话
  • 陕西省交通建设集团西长分公司网站/香港域名注册网站
  • 网站做批发文具/网站关键词seo费用
  • 集团门户网站建设/苏州seo关键词优化价格
  • 单位如何做网站宣传/外链网站
  • 做米业的企业网站/百度指数数据分析报告
  • 在线制作flash的网站/网上国网推广
  • 接项目做的网站/做个公司网站一般需要多少钱
  • 周口师范做网站/营销策划咨询
  • 建设网络道德教育网站不包括/免费网站推广群发软件
  • 请人代做谷歌外贸网站/百度网址大全电脑版旧版本
  • 上海网站开发定制/深圳关键词优化
  • 做nba直播网站好/汕头网站建设方案优化
  • 机械网站模板/品牌策划公司介绍
  • 推荐一些能打开的网站/新闻稿发布平台
  • 做商城网站要什么手续费/百度小说app下载
  • 营销的网站/软文发布网站
  • 手机网站域名怎么解析/网络公司网页设计
  • scala做网站/广州谷歌seo公司
  • 泰安建设银行网站/如何在百度发布文章
  • 九江县建设规划局网站/扬州seo推广
  • 资讯网站手机网站模板/深圳网站优化
  • 天津商城网站建设/南昌seo搜索优化
  • php与 wordpress/郑州seo课程