题目:[USACO14FEB]Auto-complete S

字典树套路题,字典树优化剪枝,加个cnt标记即可

代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <iostream>
const int M=1e6+5;
using namespace std;
int tot,m,n,q;
char s[1005];
namespace trietree
{
struct trie
{
int son[26],sum,tag;
}e[M];
void insert(int len,int id)
{
int p=0;
for(int i=0;i<len;i++)
{
int k=s[i]-'a';
if(!e[p].son[k])
e[p].son[k]=++tot;
e[p].sum++;
p=e[p].son[k];
}
e[p].sum++;
e[p].tag=id;
}
int dfs(int p,int pos)
{
if(e[p].tag && pos==1)
return e[p].tag;
if(e[p].tag)
pos--;
if(!pos)
return e[p].tag;
int ok=0;
for(int i=0;i<26;i++)
{
if(!e[p].son[i])
continue;
if(e[e[p].son[i]].sum>=pos)
return dfs(e[p].son[i],pos);
pos-=e[e[p].son[i]].sum;
}
return -1;
}
int query(int len)
{
int p=0;
for(int i=0;i<len;i++)
{
int k=s[i]-'a';
if(!e[p].son[k])
return -1;
p=e[p].son[k];
}
return dfs(p,m);
}
}
using namespace trietree;
int main()
{
ios::sync_with_stdio(0);
cin>>n>>q;
for(int i=1;i<=n;i++)
{
cin>>s;
int len=strlen(s);
insert(len,i);
}
while(q--)
{
cin>>m>>s;
int len=strlen(s);
cout<<query(len)<<'\n';
}
return 0;
}

2022春每日一题:Day 37的更多相关文章

  1. 老男孩IT教育-每日一题汇总

    老男孩IT教育-每日一题汇总 第几天 第几周 日期 快速访问链接 第123天 第二十五周 2017年8月25日 出现Swap file….already exists以下错误如何解决? 第122天 2 ...

  2. 【Java每日一题】20170106

    20170105问题解析请点击今日问题下方的"[Java每日一题]20170106"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  3. 【Java每日一题】20170105

    20170104问题解析请点击今日问题下方的"[Java每日一题]20170105"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  4. 【Java每日一题】20170104

    20170103问题解析请点击今日问题下方的"[Java每日一题]20170104"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  5. 【Java每日一题】20170103

    20161230问题解析请点击今日问题下方的"[Java每日一题]20170103"查看(问题解析在公众号首发,公众号ID:weknow619) package Jan2017; ...

  6. 【Java每日一题】20161230

    // 20161229问题解析请点击今日问题下方的"[Java每日一题]20161230"查看(问题解析在公众号首发,公众号ID:weknow619)package Dec2016 ...

  7. 【Java每日一题】20161229

    package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1229 { public s ...

  8. 【Java每日一题】20161228

    package Dec2016; import java.util.ArrayList; import java.util.List; public class Ques1228 { public s ...

  9. 【Java每日一题】20161227

    package Dec2016; public class Ques1227 { public static void main(String[] args){ } { c = 1; } int c ...

  10. 【Java每日一题】20161226

    package Dec2016; public class Ques1226 { static{ num = 1; } public static int num = 2; public static ...

随机推荐

  1. 第十五章 部署zookeeper集群

    1.集群规划 主机名 角色 IP hdss7-11.host.com k8s代理节点1.zk1 10.4.7.11 hdss7-12.host.com k8s代理节点2.zk2 10.4.7.12 h ...

  2. 【读书笔记】C#高级编程 第十九章 程序集

    (一)程序集的含义 程序集是.NET用于部署和配置单元的术语. .NET应用程序包含一个或多个程序集.通常扩展名是EXE或DLL的.NET可执行程序称为程序集. 程序集是自我描述的安装单元,由一个或多 ...

  3. 跟羽夏学 Ghidra ——初识

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.本人非计算机专业,可能对本教程涉及的事物没有了解的足够深入,如有错误,欢迎批评指正. 如有好的建议,欢迎反馈.码字不易,如果本篇文章 ...

  4. MySQL到底有没有解决幻读问题?这篇文章彻底给你解答

    MySQL InnoDB引擎在Repeatable Read(可重复读)隔离级别下,到底有没有解决幻读的问题? 网上众说纷纭,有的说解决了,有的说没解决,甚至有些大v的意见都无法达成统一. 今天就深入 ...

  5. linux下安装mysql(rpm安装)

    Mysql 5.7.29安装步骤 1.首先卸载自带的Mysql-libs(如果之前安装过mysql,要全都卸载掉) rpm -qa | grep -i -E mysql\|mariadb | xarg ...

  6. Typora Markdown 安装包

    下载地址: 链接:https://pan.baidu.com/s/1wy0Ik95AjM5WjSC3nzOzqA 提取码:f26j 复制这段内容后打开百度网盘手机App,操作更方便哦 已更新至最新版0 ...

  7. Kubernetes生态架构图

    图片来源于:https://gitbook.curiouser.top/ 一.kubernetes 集群架构图 二.Openshift or Kubernetes 集群架构图 三.常见的 CI/CD ...

  8. MongoDB $type 操作符

    描述 $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果. MongoDB 中可以使用的类型如下表所示: 类型 数字 备注 Double 1 String 2 Object 3 ...

  9. 字符串反码A

    while True: try: string=input() if string!="!": res="" for i in string: if i.isu ...

  10. Jpa常用API

    service中执行sql 根据请求参数拼接sql import javax.persistence.Query; import javax.persistence.EntityManager; @A ...