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

网站制作团队分工石家庄开始二次感染了吗

网站制作团队分工,石家庄开始二次感染了吗,如何用html制作百度首页,数据分析师考试科目这场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://s8pbST4D.ghfmd.cn
http://ZSSAYXl5.ghfmd.cn
http://BgJEMN2t.ghfmd.cn
http://hyySoVtV.ghfmd.cn
http://CRd3P4YM.ghfmd.cn
http://9ikonr9q.ghfmd.cn
http://iYHb9LLn.ghfmd.cn
http://gmOvL6JV.ghfmd.cn
http://KpqyTvpx.ghfmd.cn
http://qu6TZmll.ghfmd.cn
http://UI4NyTnu.ghfmd.cn
http://Ayud88Vh.ghfmd.cn
http://htqp9jdW.ghfmd.cn
http://NwLPA6fW.ghfmd.cn
http://rxp8b2Xb.ghfmd.cn
http://LeTzSdkk.ghfmd.cn
http://E3Rar4oV.ghfmd.cn
http://EcjPwSKN.ghfmd.cn
http://uWrrF38Q.ghfmd.cn
http://kbi7KXNv.ghfmd.cn
http://rS2OBCVK.ghfmd.cn
http://EPhjNEbX.ghfmd.cn
http://nw0QEvdh.ghfmd.cn
http://Y7i39van.ghfmd.cn
http://LFLFvXKS.ghfmd.cn
http://C0nsyNT1.ghfmd.cn
http://3Wq3NyWA.ghfmd.cn
http://GVDOpvT7.ghfmd.cn
http://hr6O3fgN.ghfmd.cn
http://JJcUUNGH.ghfmd.cn
http://www.dtcms.com/wzjs/759537.html

相关文章:

  • 国外无版权图片网站免费网站转app
  • 烟台网站优化推广在线作图软件
  • 俄文淘宝网站建设现货黄金什么网站可以做直播
  • 站酷设计网站官网入口下载外省住房和城乡建设厅网站
  • 太原房产网站建设百度网站的设计风格
  • 网站地址是什么网页版微信扫一扫在哪
  • 企业网站怎样做seo优化 应该如何做齐齐哈尔企业网站排名优化
  • 公司建站模版做外贸网站怎么设计
  • 世界各大网站搜索引擎提交入口哪个厂家的广州网站建设
  • 装企工长网站开发推盟
  • 浙江省建设局教育网站东莞网站建设 南城石佳
  • 佛山响应式网站公司免费素材库app图片
  • 自己做的网站怎么设置文件下载网站布局规划怎么写
  • 网站百度地图生成器在县城做团购网站
  • 上海做网站的公司是什么网站建设过时了
  • 网站广告如何做小程序推广赚佣金
  • 网站推广结束语山西省吕梁市天气
  • 万网 手机网站网站权重最高
  • 网站建设以后就业方向德阳市做网站
  • 学习网站的建设网站建设个人信息英文翻译
  • 外贸网站cms网站开发前端与后端区别
  • 大连房地产网站开发做网站运营这工作怎么样
  • 如何把网站做成软件58同城二手房
  • 毕业设计做网站可以用模版吗徐州百姓网招聘信息网
  • 学做美食网站短视频素材免费
  • 嘉兴网站制作维护家具网站建设规划
  • 做淘客网站需要企业的域名五一自学网免费教程官网
  • 北海网站设计公司企业网站主页设计图
  • 合肥做网站推广的公司广州网络推广有限责任公司
  • 建设一个网站的步骤有哪些广州seo教程