2020.03.08模拟赛14(第二题)

2.自动匹配(auto)

题目描述

奶牛贝里斯最近有了一部新手机,于是他经常发短信。但是他经常打错单词,因为手机屏幕太小而他的爪子太大了((⊙o⊙))。农夫约翰决定帮助贝里斯来开发一个app应用,使得可以从一个不完整的单词猜想整个单词。
App应用是由W个单词组成的,每个单词都是由’a’…’z’组成的,这些单词总的长度不超过1000000。现在,总共有N个不完整的单词,每个单词的度不超过1000。对于第i个不完整的单词S_i,app应用要计算出在单词库中,按字典序排列的第K_i个前缀是S_i的单词。注意,自己也是自己的前缀。

输入

第一行是两个正整数W和N。
接下来W行,每行一个字典库里的单词。
接下里N行,每行一个K_i和其对应的不完整的单词S_i。

输出

输出包括N行,对于第i行,输出在字典库中按字典序排列的满足前缀是S_i的第K_i个单词在原字典库中的位置。如果没有足够的单词,就输出-1。

样例输入

10 3
dab
ba
ab
daa
aa
aaa
aab
abc
ac
dadba
4 a
2 da
4 da

样例输出

3
1
-1

数据范围限制

【数据规模】
字典库中单词的总长度不超过1000000,1<=N<=1000,每个不完整的单词的长度不超过1000。
W<=30000

提示

【样例说明】
前缀是a的单词有aa,aaa,aab,ab,abc,ac,第4个是ab,ab在原字典库中是第3个。前缀是da的单词有daa,dab,dadba,第2个是dab,在原字典库中是第1个。没有第4个前缀是da的单词,所以输出-1。

正解
首先我们扩充一个知识点
x=lower_bound(s1+1,s1+w+1,s)-s1;
C++ lower_bound 与 upper_bound 函数

我们可以用快排先排序,再用这个函数AC
AC代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int w,n,k,x;
string s,s1[30005];
struct stu
{
	string str;
	int num;
}a[30005];
bool cmp(stu x,stu y)
{
	return x.str<y.str;
} 
int main()
{
	freopen("auto.in","r",stdin);
	freopen("auto.out","w",stdout);
	cin>>w>>n;
	for(int i=1;i<=w;i++)
	{
		cin>>a[i].str;
		a[i].num=i;//位置记录下来
	}
	sort(a+1,a+w+1,cmp);//快排
	for(int i=1;i<=w;i++)s1[i]=a[i].str;
	for(int i=1;i<=n;i++)
	{
		cin>>k>>s;
		x=lower_bound(s1+1,s1+w+1,s)-s1;//二分找位置
		x=x+k-1;//加上k-1,就是前缀和是s的第k个
		if(x>w)cout<<-1<<endl;//如果越界就-1
		else if(s1[x].find(s,0)!=0)cout<<-1<<endl;
		//如果当前位置的字符串的前缀不是s,就-1
		else cout<<a[x].num<<endl;//否则输出这个字符串最开始的位置
	}
	return 0;
}

下面附本次比赛的其它题目

2020.03.08模拟赛14(第一题)
2020.03.08模拟赛14(第二题)
2020.03.08模拟赛14(第三题)
2020.03.08模拟赛14(第四题)
2020.03.08模拟赛14(总结)

谢谢

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
modesim2020.4是由Simio LLC 公司开发的一款模拟软件,主要用于模拟和优化复杂的生产和供应链过程。以下是modesim2020.4的安装教程。 首先,从Simio官方网站(www.simio.com)下载modesim2020.4的安装程序。在官方网站的产品页面上,找到modesim2020.4,并点击下载按钮。接下来,根据你的操作系统选择对应的安装程序进行下载。 下载完成后,运行安装程序。在安装程序中,你可以选择安装目录和语言等选项。根据个人喜好进行选择,并点击"下一步"。 接下来,你需要同意Simio的许可协议。仔细阅读协议,并选择"我同意"按钮。 然后,你可以选择添加快捷方式和创建桌面图标等选项。根据个人需求进行勾选,并点击"下一步"。 然后,你需要选择安装类型。选择"完全安装"以安装所有可用的组件和功能。 接下来,选择安装路径。你可以选择默认路径或自定义路径。 然后,点击"安装"按钮开始安装。请耐心等待安装程序完成。 安装完成后,你可以选择"立即运行"以启动modesim2020.4。你也可以取消勾选此选项,并手动在开始菜单或桌面上寻找modesim2020.4的快捷方式。 启动modesim2020.4后,你可以根据软件界面上的引导进行配置和使用。 总而言之,modesim2020.4的安装过程相对简单。只需要从官方网站下载安装程序,按照安装向导进行操作即可完成安装。安装完成后,你就可以使用modesim2020.4进行复杂过程的模拟和优化了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值