洛谷P2237 [USACO14FEB]自动完成Auto-complete

洛谷P2237 [USACO14FEB]自动完成Auto-complete
Trie树

 1 #include <bits/stdc++.h>
 2 #define For(i, j, k) for(int i=j; i<=k; i++)
 3 #define Dow(i, j, k) for(int i=j; i>=k; i--)
 4 #define LL long long
 5 using namespace std;
 6 inline int read() {
 7     int x = 0, f = 1;
 8     char ch = getchar();
 9     while(ch<‘0‘||ch>‘9‘) { if(ch==‘-‘) f = -1; ch = getchar(); }
10     while(ch>=‘0‘&&ch<=‘9‘) { x = x*10+ch-48; ch = getchar(); }
11     return x * f;
12 }
13 void write(int x) {
14     if(x<0) putchar(‘-‘), x=-x;
15     if(x>9) write(x/10);
16     putchar(x%10+48);
17 }
18 void writeln(int x) { write(x); puts(""); }
19
20 const int N = 1000011;
21 int n, tot, K, Q;
22 int son[N][26], siz[N], to[N];
23 char ch[N];
24
25 inline void insert(int id, char ch[]) {
26     int now = 0;
27     int len = strlen(ch+1);
28     For(i, 1, len) {
29         if(!son[now][ch[i]-‘a‘]) son[now][ch[i]-‘a‘] = ++tot;
30         now = son[now][ch[i]-‘a‘]; ++siz[now];
31     }
32     to[now] = id;
33 }
34
35 inline int Query(int K, char ch[]) {
36     int now = 0;
37     int len = strlen(ch+1);
38     For(i, 1, len) {
39         if(!son[now][ch[i]-‘a‘]) return -1;
40         now = son[now][ch[i]-‘a‘];
41     }
42     if(siz[now] < K) return -1;
43     while(1) {
44         if(to[now] && K==1) return to[now];
45         if(to[now]) --K;
46         For(i, 0, 25)
47             if(siz[son[now][i]] < K)
48                 K -= siz[son[now][i]];
49             else {
50                 now = son[now][i];
51                 break;
52             }
53     }
54 }
55
56 int main() {
57     n = read(); Q = read();
58     For(i, 1, n) {
59         scanf("%s", ch+1);
60         insert(i, ch);
61     }
62     while(Q--) {
63         K = read();
64         scanf("%s", ch+1);
65         writeln(Query(K, ch));
66     }
67     return 0;
68 }

原文地址:https://www.cnblogs.com/third2333/p/8444355.html

时间: 2024-10-10 10:12:25

洛谷P2237 [USACO14FEB]自动完成Auto-complete的相关文章

Atitit.auto complete 自动完成控件的实现总结

Atitit.auto complete  自动完成控件的实现总结 1. 框架选型 1 2. 自动完成控件的ioc设置 1 3. Liger  自动完成控件问题 1 4. 官网上的code有问题,不能显示控件渲染,,查看源码  <input type="text" id="txt2" onchange="changeEventO9()"/>这个简化版本的走ok兰... 1 5. Liger  自动完成控件的调用 2 6. ------

洛谷P1227[JSOI2008]完美的对称

洛谷P1227[JSOI2008]完美的对称 题目描述 在峰会期间,必须使用许多保镖保卫参加会议的各国代表.代表们除了由他自己的随身保镖保护外,组委会还指派了一些其他的特工和阻击手保护他们.为了使他们的工作卓有成效,使被保卫的人的安全尽可能得到保障,保镖被分配到被保护人的各个方向. 保镖的最佳站立位置应该是这样的:被保护人应站在所有保镖的对称中心.但是,只要被保 护人一移动,保镖就很难根据要人的新位置调整位置.大多数的特工都很难对此作出实时调整. 因此,安全部长决定将该过程逆转一下,保镖先站好自

洛谷 P3671 [USACO17OPEN]Where&#39;s Bessie? 贝西在哪呢

P3671 [USACO17OPEN]Where's Bessie? 贝西在哪呢 题目背景 农夫John正在测试一个他新发明的全自动寻找奶牛无人机,它能够照一张农场的图片然后自动找出奶牛的位置. 不幸的是,这个相机并不包含一个优秀的寻找奶牛函数,所以农夫John需要你来写一个. 农场的俯瞰图被定义为一个n * n的字符矩阵.矩阵由大写字母A到Z组成,每个字母表示一种可行 的颜色.农夫John发现一个可能是奶牛的位置(以下简称PCL)的最好定义如下: 一个PCL是一个矩阵(可能是整张图),矩阵的边

在洛谷3369 Treap模板题 中发现的Splay详解

本题的Splay写法(无指针Splay超详细) 前言 首先来讲...终于调出来了55555...调了整整3天..... 看到大部分大佬都是用指针来实现的Splay.小的只是按照Splay的核心思想和原理来进行的.可能会有不妥之处,还请大佬们指出,谢谢! 那么这个题解存在的意义就是让不会敲Splay的人额...会敲Splay啦... 基本思想 数据结构 对于Splay,我定义了一个class类(当成struct就行啦...个人习惯不同啦),定义名称为“Splay”. 之后在类中,我定义了Splay

洛谷 P2888 [USACO07NOV]牛栏Cow Hurdles

洛谷 P2888 [USACO07NOV]牛栏Cow Hurdles 题目描述 Farmer John wants the cows to prepare for the county jumping competition, so Bessie and the gang are practicing jumping over hurdles. They are getting tired, though, so they want to be able to use as little ene

[洛谷P1541] 乌龟棋

洛谷题目链接:乌龟棋 题目背景 小明过生日的时候,爸爸送给他一副乌龟棋当作礼物. 题目描述 乌龟棋的棋盘是一行N个格子,每个格子上一个分数(非负整数).棋盘第1格是唯一的起点,第N格是终点,游戏要求玩家控制一个乌龟棋子从起点出发走到终点. 乌龟棋中M张爬行卡片,分成4种不同的类型(M张卡片中不一定包含所有4种类型的卡片,见样例),每种类型的卡片上分别标有1.2.3.4四个数字之一,表示使用这种卡片后,乌龟棋子将向前爬行相应的格子数.游戏中,玩家每次需要从所有的爬行卡片中选择一张之前没有使用过的爬

洛谷 P2709 BZOJ 3781 小B的询问

题目描述 小B有一个序列,包含N个1~K之间的整数.他一共有M个询问,每个询问给定一个区间[L..R],求Sigma(c(i)^2)的值,其中i的值从1到K,其中c(i)表示数字i在[L..R]中的重复次数.小B请你帮助他回答询问. 输入输出格式 输入格式: 第一行,三个整数N.M.K. 第二行,N个整数,表示小B的序列. 接下来的M行,每行两个整数L.R. 输出格式: M行,每行一个整数,其中第i行的整数表示第i个询问的答案. 输入输出样例 输入样例#1: 6 4 3 1 3 2 1 1 3

洛谷1231 教辅的组成

洛谷1231 教辅的组成 https://www.luogu.org/problem/show?pid=1231 题目背景 滚粗了的HansBug在收拾旧语文书,然而他发现了什么奇妙的东西. 题目描述 蒟蒻HansBug在一本语文书里面发现了一本答案,然而他却明明记得这书应该还包含一份练习题.然而出现在他眼前的书多得数不胜数,其中有书,有答案,有练习册.已知一个完整的书册均应该包含且仅包含一本书.一本练习册和一份答案,然而现在全都乱做了一团.许多书上面的字迹都已经模糊了,然而HansBug还是可

洛谷教主花园dp

洛谷-教主的花园-动态规划 题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值. 教主最喜欢3种树,这3种树的高度分别为10,20,30.教主希望这一圈树种得有层次感,所以任何一个位置的树要比它相邻的两棵树的高度都高或者都低,并且在此条件下,教主想要你设计出一套方案,使得观赏价值之和最高. 输入输出格式 输入格式: 输入文件garden.in的第1行为一个正整数n,表示需要种的