AcWing 自动补全 二分

题目链接

先上AC代码。
参开代码:

#include<bits/stdc++.h>
#include<unordered_map>
using namespace std;
#define INF 0x3f3f3f3f
typedef long long ll;string s[100005];
unordered_map<string, int> m;
bool check(string a, string b)
{if (a.size() < b.size()) return false;for (int i = 0; i < b.size();i++)if (a[i] != b[i]) return false;return true;
}int main()
{ios::sync_with_stdio(false);cin.tie(nullptr), cout.tie(nullptr);int w, n;cin >> w >> n;for (int i = 0; i < w; i++){cin >> s[i];m[s[i]] = i + 1;}sort(s, s + w);string str;int num;for (int i = 0; i < n; i++){cin >> num >> str;int l = 0, r = w;int mid = (l + r) >> 1;while (l <= r){if (s[mid] >= str) r = mid - 1;else l = mid + 1;mid = (l + r) >> 1;}if (s[mid + num].substr(0, str.size()) == str) cout << m[s[mid + num]] << endl;else cout << -1 << endl;}return 0;
}

思路:
基本思路是先对字典中的字符串sort排序,然后使用查找的方法确定找到的字符串开始计算的第n个字符串是否与待自动补全的字符串匹配,若存在,输出第n个字符串的初始顺序;若不存在,则输出-1。
而对于查找,若使用暴力方法,则会导致查找超时。当查找超时时,我们不难想到可以用时间复杂度为logn的二分查找,代码如下所示:

while (l <= r){if (s[mid] >= str) r = mid - 1;else l = mid + 1;mid = (l + r) >> 1;}

上面是基础的二分查找写法,起初我对第三行的大于等于并不理解,写成了大于,导致我只过了少部分测试店。后来回想,发现:若是大于号,当字典中有和待匹配字符串相同的字符串,则会导致查找的字符串并不是满足条件的第一个字符串。又因为题目说字典中的字符串不可能相同,因此大于等于号查找出来的字符串一定是当前字典序中第一个符合条件的字符串。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312569.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2019 年终回顾:不忘初心,负重前行

点击上方蓝字关注“汪宇杰博客”导语2019 年就要接近尾声&#xff0c;这一年对于我来说&#xff0c;有许多有意义的事件。我成长了许多&#xff0c;并依然保持着对技术的热情。在辞旧迎新之际&#xff0c;我想回顾一下我这一年中有意义的事件与收获&#xff0c;期待与大家一起在…

机试真题1 反序输出 cin判断读取结束

题目链接 解题思路 这题是纯纯的送分题&#xff0c;但我忘记了怎么判断读取结束。应该用&#xff1a; while (cin >> s){}在Windows中&#xff0c;CtrlZ输出输入结束符号。 参考代码 #include<bits/stdc.h> using namespace std;void print(string s) {int len…

【C#】设计模式的学习征途系列文章目录(2019版)

Photo &#xff1a;Design Patterns文 | Edison Zhou2017年&#xff0c;我开始系统学习设计模式&#xff0c;参考了《大话设计模式》、《设计模式的艺术》等书籍&#xff0c;并通过C#语言写了各种模式的代码示例&#xff08;已经放到了我的github上并收获了120个star&#xff0…

机试真题2 进制转换 高精度除法

题目链接 解题思路 这题需要通过高精度加除法来解决。原本以为高校机试题最多考到高精度的加减法&#xff0c;没想到还会考高精度和低精度的乘除法&#xff0c;不亏是你清的题。 需要注意的是&#xff0c;一开始存储需要是逆序存储&#xff0c;方便后面的操作&#xff0c;同时…

原创 | 为什么年终奖是一个彻头彻尾的职场圈套?

0前言之前写过几篇职场专题的文章&#xff0c;反响不错&#xff0c;也先后被不少公众号转载过&#xff0c;这几天来了不少新朋友&#xff0c;如果之前没阅读过&#xff0c;可以在后台回复“职场”2个字&#xff0c;查看系列文章。转眼又到年底了&#xff0c;不知道有多少人在心…

机试真题3 进制转换2 高精度除法

题目链接 解题思路 这题还是通过高精度的除法来做&#xff0c;思路与上一篇文章类似&#xff0c;区别就是输入输出的进制位数不是固定的。对于输入的进制m&#xff0c;在divide函数中更新余数的时候乘以的数字改成m&#xff1b;对于输出的进制n&#xff0c;在divide函数中取余…

Blazor 机制初探以及什么是前后端分离,还不赶紧上车?

上一篇文章发了一个 BlazAdmin 的尝鲜版基于 Blazui 的 Blazor 后台管理模板 BlazAdmin 正式尝鲜&#xff0c;这一次主要聊聊 Blazor 是如何做到用 C# 来写前端的&#xff0c;传送门&#xff1a;https://www.cnblogs.com/wzxinchen/p/12057171.html飚车前需要说明的一点是&…

机试真题4 成绩排序

题目链接 解题思路 题目非常简单&#xff0c;就是需要注意一下直接用sort方法做的话&#xff0c;会导致同分时输出的人名顺序与输入时不一致&#xff0c;这是因为sort函数是不稳定的算法&#xff08;sort排序为了提升性能&#xff0c;会根据不同的情况选用不同的排序算法&…

云原生

一、云原生概念的诞生云原生&#xff08;Cloud Native&#xff09;的概念&#xff0c;由来自Pivotal的MattStine于2013年首次提出&#xff0c;被一直延续使用至今。这个概念是Matt Stine根据其多年的架构和咨询经验总结出来的一个思想集合&#xff0c;并得到了社区的不断完善&a…

基于 Kubernetes 的 CICD 基础设施即代码

在上一篇基于 Kubernetes 的基础设施即代码一文中&#xff0c;我概要地介绍了基于 Kubernetes 的 .NET Core 微服务和 CI/CD 动手实践工作坊 使用的基础设施是如何使用代码描述的&#xff0c;以及它的自动化执行过程。如果要查看基于 Kubernetes 的基础设施即代码架构全图&…

Azure Arc:微软是怎么玩多云游戏的?

混合云在竞争性云提供商的基础上提供了来自云提供商的服务&#xff0c;从而使组织能够以不同方式一起使用来自不同供应商的云服务。例如&#xff0c;组织可以使用将数据存储在一个云中存储上的功能&#xff0c;而另一个云服务商则在该应用程序或数据之上运行。因此&#xff0c;…

当我们在谈 .NET Core 跨平台时,我们在谈些什么?--学习笔记

摘要.NET Framework在过去十多年在跨平台上的尝试。.NET Core跨平台的实现有何不同&#xff1f;基于 .NET Standard的平台兼容性是如何实现的&#xff1f;讲师介绍历史枷锁.NET Framework FCL CLR"跨平台"的 .NET Framework完全独立&#xff0c;各自为政复用之殇由…

IdentityServer4学习笔记汇总(实现传送门在底部)

前言互联网时代,对信息和资源的保护越发苛刻,在所有应用中授权和认证是必不可少缺少的一部分。如果一个应用没有授权和认证那么这个应用就是不完整或者说不安全的应用。在.Net平台给我们提供了一套完整的授权认证框架,那就是IdentityServer4。它实现了OpenId Connect和OAuth2.0…

多库操作2:终于实现多个数据库操作

▼更多精彩推荐&#xff0c;上午10点到达▼圣诞节快乐在上周的文章【多库操作&#xff1a;多个数据库的动态切换&#xff08;一&#xff09;】中&#xff0c;我们简单说了说&#xff0c;如何切换数据库&#xff0c;虽然实现了大部分的功能&#xff0c;但是最后也遗留了小问题&a…

数据结构作业1

1.给定NNN的三维数组A&#xff0c;则在不改变数组的前提下&#xff0c;查找最小元素的时间复杂度是&#xff1a;D A.O(N​2​​) B.O(NlogN) C.O(N​3​​logN) D.O(N​3​​) 2.For the following piece of code for(i0; i<n; i)for(ji; j>0; j/2)printf(“%d\n”, j);…

服务发现技术是如何演进出来的?

昨天写了一篇<微服务的时间和成本去哪儿了>&#xff0c;有人在底下留言&#xff1a;我的回答是&#xff1a;"微服务可以不用服务发现和负载均衡吗&#xff1f;它是微服务一个核心组件。怎么能说没有关系&#xff1f;"我觉得有必要来思考和总结一下服务发现技术…

7-5 两个有序链表序列的合并 (20 分)

已知两个非降序链表序列S1与S2&#xff0c;设计函数构造出S1与S2合并后的新的非降序链表S3。 输入格式: 输入分两行&#xff0c;分别在每行给出由若干个正整数构成的非降序序列&#xff0c;用−1表示序列的结尾&#xff08;−1不属于这个序列&#xff09;。数字用空格间隔。 …

3分钟搞懂前后端开发的区别

上周末见了好多开发的年轻朋友&#xff0c;问了我一个问题&#xff1a;“前后端的区别和要求是什么&#xff1f;”分不清前后端开发的区别和要求&#xff0c;一种是因为前后端都了解&#xff0c;号称“全栈工程师”&#xff0c;但又什么都不是很精通&#xff1b;另一种是前端的…

7-4 螺旋方阵 (20 分)

所谓“螺旋方阵”&#xff0c;是指对任意给定的N&#xff0c;将1到NN的数字从左上角第1个格子开始&#xff0c;按顺时针螺旋方向顺序填入NN的方阵里。本题要求构造这样的螺旋方阵。 输入格式&#xff1a; 输入在一行中给出一个正整数N&#xff08;<10&#xff09;。 输出格…

基于 Kubernetes 的微服务部署即代码

在基于 Kubernetes 的基础设施即代码一文中&#xff0c;我概要地介绍了基于 Kubernetes 的 .NET Core 微服务和 CI/CD 动手实践工作坊使用的基础设施是如何使用代码描述的&#xff0c;以及它的自动化执行过程。如果要查看基于 Kubernetes 的基础设施即代码架构全图&#xff0c;…