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

怎么做网站的搜索引擎网络营销外包推广定制公司

怎么做网站的搜索引擎,网络营销外包推广定制公司,机电工程栏建设项目网站建设,建设网站搞网络营销的总结这场A-E真的简单,E题稍微卡了一会,还需要dp优化 E. Unpleasant Strings 题目: 思路: 很有学习价值的一题 这题有两个难点,第一是如何快速判断一个 t 是不是 s 的子序列,第二个是如何快速多次查找最小添加数…

这场A-E真的简单,E题稍微卡了一会,还需要dp优化

E. Unpleasant Strings

题目:

思路:

很有学习价值的一题

这题有两个难点,第一是如何快速判断一个 t 是不是 s 的子序列,第二个是如何快速多次查找最小添加数量 

我们先来解决第一个,由于要是 s 的子序列,那我们肯定要找到 t 的第一个字符在 s 中最前的位置,然后第二个字符在 s 中最前的位置(且要在第一个字符的位置之后),那么这样的查找我们怎么优化呢?如果每次循环一遍字符串肯定是不行的,所以我们要想一个快速的查找位置的方法,我们观察到每次查找都是比上一个位置大,即具有单调性,那么对于这种问题我们显然可以使用二分查找来写,因此我们记录一个数组 f[i],其代表 i 字符的位置有哪些,那么查找过程就很明显可以写出来了,我们枚举每个位置,并且选择第一个比之前位置大的合法位置,如果找不到,说明这个字符串不是子序列,否则必定是

那么找子串结束了,接下来如何快速知道要几个字符呢?

这里我直接给出我最后的优化方法,我们在判断是否合法时我们能知道子串最后一个字符对应的哪里,我们希望越快得出结果最好,那么我们可以考虑如果我们能在 O(1) 的复杂度里得出来不就很完美吗,我们观察一下,对于同一个位置我们最好的添加方式其实可以从后面的状态转移过来,比如对于 bcb,我们之后添加的方式可能是 bcba bcbb bcbc ,那我们只需要选择里面需要添加次数最少的可能即可,那么对于 bcb 的答案就是 min(bcba bcbb bcbc) + 1

那么其实答案就出来了,我们可以定义 dp[i] 为当前字符串结尾在 i 处时所需要的最小花费,那么显然转移就是 dp[i] = min(dp[j] + 1) 其中 j 就是后续添加 26 种字符之后的位置的可能,特别注意可能为 0,所以记得判断一下

具体实现看代码

代码:

#include <iostream>
#include <algorithm>
#include<cstring>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <memory>
using namespace std;
#define int long long
#define yes cout << "Yes\n"
#define no cout << "No\n"
int n, k;
string s;
vector<vector<int>> f(30);
vector<int> dp(1000006,(int)1e9);
void Init()
{for (int i = 0; i < n; i++){f[s[i] - 'a'].push_back(i);}for (int i = n - 1; i >= 0; i--){for (int j = 0; j < k; j++){auto it = upper_bound(f[j].begin(), f[j].end(), i);if (it == f[j].end()){dp[i] = 1;break;}dp[i] = min(dp[i], dp[*it] + 1);}}
}int getPos(const string& t)
{int temppos = -1;for (auto c : t){auto it = upper_bound(f[c - 'a'].begin(), f[c - 'a'].end(), temppos);if (it == f[c - 'a'].end()){return -1;}temppos = *it;}return temppos;
}
void solve()
{int q;cin >> q;for (int i = 0; i < q; i++){string t; cin >> t;if (getPos(t) == -1){cout << 0 << endl;continue;}cout << dp[getPos(t)] << endl;}
}signed main()
{cin.tie(0)->sync_with_stdio(false);int t = 1;//cin >> t;while (t--){cin >> n >> k;cin >> s;Init(); solve();}return 0;
}

http://www.dtcms.com/wzjs/244713.html

相关文章:

  • 自建服务器做网站推广类软文案例
  • 网站备案背景幕布下载windows优化大师有什么功能
  • 宣传网站制作方案海外自媒体推广
  • 手工视频制作网站营销推广方式都有哪些
  • 做网站不如做公众号批量查询权重
  • 网站优化主要怎么做推广seo网站
  • 在美国建设网站优化大师官方正版下载
  • 东莞市公司网站建设旺道seo营销软件
  • 免费企业网站程序asp深圳网络推广解决方案
  • 做的比较早的海淘网站产品营销
  • 西安做网站公司怎么样seo入门培训
  • 网上的网站模板怎么用seo的优化技巧有哪些
  • wordpress 在线浏览做seo排名好的公司
  • 莱芜租房百度seo关键词排名 s
  • WordPress网站自媒体模板百度投放广告平台
  • 做游戏网站公司app推广引流渠道
  • 公司网站设计哪家公司好seo搜索排名
  • 如何设置自己的网址seo网络营销的技术
  • 做门的网站建设上海关键词排名手机优化软件
  • 合肥百姓网网站建设体验营销案例
  • 企业运营效率的三个指标博客seo优化技术
  • html5可以做交互网站吗谷歌引擎搜索
  • 独立web网站服务器推广方案万能模板
  • 100m的网站 数据库seo优化交流
  • 做红包网站是犯法的吗seo概念的理解
  • 宜选科技就是帮人做网站seo网站诊断报告
  • 母了猜猜看游戏做网站上海seo推广方法
  • 如何做网校网站怎么优化网站排名才能起来
  • 有什么好网站做浏览器主页南京网站设计优化公司
  • 有关计算机网站建设的论文网络营销顾问