洛谷 P1628 合并序列
洛谷 P1628 合并序列
题目描述
有N个单词和字符串T,按字典序输出以字符串T为前缀的所有单词。
输入格式
输入文件第一行包含一个正整数N;
接下来N行,每行一个单词,长度不超过100;
最后一行包含字符串T。
【数据规模】
对于60%的数据,满足1≤N≤1000;
对于100%的数据,满足1≤N≤100000且所有字符均为小写字母;
输出格式
按字典序升序输出答案。
输入输出样例
输入 #1复制
输出 #1复制
题解:
这道题有多种方法:
字典树(Trie树)、排序、二叉堆...
正解应该是字典树(来自教练和大佬的指点)可惜我不会。
所以我们考虑一种朴素方法:
处理输入的单词和前缀关键词的匹配,如果匹配上了就加入要排序的一个数组中,没匹配上就不用管,因为C++的sort函数是支持字符串排序的(当然要用C++STL中的string容器),所以就可以保证正确性。
而且时间也可以过。
那么,我们还可以用堆进行数据结构处理。实现原理和上面那个大同小异。因为小根堆(这里用优先队列实现)也可以维护一个字符串的字典序。
比较一下这两种做法:
排序的时间复杂度比较高,但是码量少,容易想。二叉堆的常数大,如果不开O2的话奇慢无比容易被卡,但大多数时候要更优秀一些。而且可以用于装b。
代码:
#include<cstdio>
#include<string>
#include<queue>
#include<vector>
#include<iostream>
using namespace std;
const int maxn=1e5+1;
int n;
string s[maxn],k;
priority_queue<string,vector<string>,greater<string> >q;
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
cin>>s[i];
q.push(s[i]);
}
cin>>k;
for(int i=1;i<=n;i++)
{
int cnt=0;
string a=q.top();
q.pop();
for(int j=0;j<k.size();j++)
if(a[j]==k[j])
cnt++;
if(cnt==k.size())
cout<<a<<endl;
}
return 0;
}
洛谷 P1628 合并序列的更多相关文章
- 洛谷P1628 合并序列
题目描述 有N个单词和字符串T,按字典序输出以字符串T为前缀的所有单词. 输入输出格式 输入格式: 输入文件第一行包含一个正整数N: 接下来N行,每行一个单词,长度不超过100: 最后一行包含字符串T ...
- 洛谷P1628合并序列【模板】(Trie+dfs)
很久之前写的题了,当时不知道怎么dfs所以卡了一段时间,^_^ 题解:由于题目给了一大堆字符串,所以首先考虑应该可以建树,之后找到T所在的位置,对T所在的位置dfs就行了 代码: 1 #include ...
- 洛谷 P2300 合并神犇
洛谷 听说这题可以\(n^2\)水过去,不过这里介绍一种\(O(n)\)的做法. \(f[i]\)为第\(1-i\)位合并的次数. \(pre[i]\)为第\(1-i\)位最末尾的数. \(j\)为满 ...
- 堆学习笔记(未完待续)(洛谷p1090合并果子)
上次讲了堆,别人都说极其简单,我却没学过,今天又听dalao们讲图论,最短路又用堆优化,问懂了没,底下全说懂了,我???,感觉全世界都会了堆,就我不会,于是我决定补一补: ——————来自百度百科 所 ...
- 洛谷 P5470 - [NOI2019] 序列(反悔贪心)
洛谷题面传送门 好几天没写题解了,写篇题解意思一下(大雾 考虑反悔贪心,首先我们考虑取出 \(a,b\) 序列中最大的 \(k\) 个数,但这样并不一定满足交集 \(\ge L\) 的限制,因此我们需 ...
- 代码源 每日一题 分割 洛谷 P6033合并果子
题目链接:切割 - 题目 - Daimayuan Online Judge 数据加强版链接: [NOIP2004 提高组] 合并果子 加强版 - 洛谷 题目描述 有一个长度为 ∑ai 的木板,需要 ...
- BZOJ 1500 洛谷2042维护序列题解
BZ链接 洛谷链接 这道题真是丧心病狂.... 应该很容易就可以看出做法,但是写代码写的....... 思路很简单,用一个平衡树维护一下所有的操作就好了,重点讲解一下代码的细节 首先如果按照常规写法的 ...
- 洛谷 P4272 - [CTSC2009]序列变换(堆)
洛谷题面传送门 u1s1 在我完成这篇题解之前,全网总共两篇题解,一篇使用的平衡树,一篇使用的就是这篇题解讲解的这个做法,但特判掉了一个点,把特判去掉在 BZOJ 上会 WA 一个点. 两篇题解都异常 ...
- 【洛谷 P1631】 序列合并 (堆)
题目链接 直接暴力搞是\(n\)方的复杂度.\(n^2\)个数选\(n\)个最小的,容易想到堆. 我们堆里记录两个信息:到\(A\)数组哪个位置了,到\(B\)数组哪个位置了, 我直接把这两个信息存在 ...
随机推荐
- 探索clickout指令实现
实现一个可复用的点击区域之外方法 随着3大框架的风靡,我们从以前的layer等UI库迁移到了更加强大的UI库,比如vue的好伙伴element,组件库的作用是封装一些常用的功能,将HTML.CSS.J ...
- Token认证,如何快速方便获取用户信息
背景 我们有一个Web项目,这个项目提供了很多的Rest API.也做了权限控制,访问API的请求必须要带上事先认证后获取的Token才可以. 认证的话就在Filter中进行的,会获取请求的Token ...
- SSM整合教程
接着一直next下去 创建各个目录 pom.xml文件中引入各种包 <?xml version="1.0" encoding="UTF-8"?> & ...
- python 自定义Iterator对象
from collections.abc import Iterator class Company(object): def __init__(self, employee_list): self. ...
- Oracle 11g 服务端的安装步骤
Ø 简介 本文主要介绍 Oracle 11g 服务端的安装步骤,在介绍之前说明以下几点: 1. 所安装的服务器是本机的虚拟机,操作系统为 Windows Server 2019: 2. 以下 ...
- MongoDB官方下载安装设置配置文件指定端口号
1.)下载 官网(https://www.mongodb.com/)右上角try free 进入下载中心,下载指定版本 ZIP和MSI随便 如果浏览器下载的慢,可以直接使用下载地址,然后迅雷下 操作 ...
- tensorflow学习笔记——使用TensorFlow操作MNIST数据(1)
续集请点击我:tensorflow学习笔记——使用TensorFlow操作MNIST数据(2) 本节开始学习使用tensorflow教程,当然从最简单的MNIST开始.这怎么说呢,就好比编程入门有He ...
- aspx.designer.cs没有自动生成代码(没有自动注册)
遇到这个问题的最大可能是:aspx页面存在bug. 比如说我的主页是从项目里的别的页面复制过来的,但是少复制了一些引用,页面就存在bug,导致aspx.designer.cs没有自动生成代码. 解决方 ...
- App_Code下类无法引用问题
App_Code 下创建的.cs文件仅仅是“内容”不是代码.设置文件为“编译”就可正常引用.
- 面试前必须要知道的21道Redis面试题
1.使用redis有哪些好处? 速度快,因为数据存在内存中,类似于HashMap,HashMap的优势就是查找和操作的时间复杂度都是O(1) 支持丰富数据类型,支持string,list,set,so ...