首页 > 其他分享 >字典树习题总结

字典树习题总结

时间:2023-08-11 21:45:34浏览次数:33  
标签:总结 std ch int res 习题 字典

#10049. 「一本通 2.3 例 1」Phone List - 题目 - LibreOJ (loj.ac)

思路:假设 $ T $ 是 $ S $ 的前缀,那么 $ T $ 的长度小于等于 $ S $ 的长度,因此,我们按照字符串的长度对字符串排序后,对其进行插入和查询操作。主要:多组数据,字典树要清空。

#include <bits/stdc++.h>

#define i64 long long

inline int read() {
    bool sym = false; int res = 0; char ch = getchar();
    while (!isdigit(ch)) sym |= (ch == '-'), ch = getchar();
    while (isdigit(ch)) res = (res << 3) + (res << 1) + (ch ^ 48), ch = getchar();
    return sym ? -res : res;
}

const int N = 1e5 + 10;

int trie[N][10], idx;
bool tag[N];

void insert(std::string s) {
    int p = 0;
    for (int i = 0; i < s.size(); i++) {
        int digit = s[i] - '0';
        if (!trie[p][digit]) {
            trie[p][digit] = ++idx;
        }
        p = trie[p][digit];
        tag[p] = true;
    }
}

bool query(std::string s) {
    int p = 0;
    for (int i = 0; i < s.size(); i++) {
        int digit = s[i] - '0';
        if (!trie[p][digit]) {
            return false;
        }
        p = trie[p][digit];
    }
    return tag[p];
} 

int main() {
    int T = read();
    while (T--) {
        int n = read();
        std::memset(trie, 0, sizeof(trie));
        std::memset(tag, false, sizeof(tag));
        idx = 0;
        std::vector<std::string> s(n + 1);
        for (int i = 1; i <= n; i++) std::cin >> s[i];
        std::sort(s.begin() + 1, s.end(), [&](std::string t1, std::string t2) {
            int len1 = t1.size(), len2 = t2.size();
            return len1 > len2;
        });
        insert(s[1]);
        bool check = true;
        for (int i = 2; i <= n; i++) {
            if (query(s[i]) == true) {
                check = false;
            }
            insert(s[i]);
        }
        if (check == true) printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}

 

标签:总结,std,ch,int,res,习题,字典
From: https://www.cnblogs.com/LDUyanhy/p/17624000.html

相关文章

  • 20230810巴蜀暑期集训测试总结
    T1考场打的是一个伪正解(没正确性的那种),评测的时候发现有subtask人都给我吓傻了,还好还有\(50pts\)。就是不知道为什么zxc和我思路一样但是有\(85\)pts。这个正解确实有点难想,而且证明正确性也比较困难。关于题解的正确性:若\(a\)的逆元不是本身。那么如果\(a^{-1}\)......
  • 多线程总结2(多线程代码案例)
    1.单例模式(Singletonpattern))单例模式保证某个类在进程中只创建一个实例1.1饿汉模式类加载的同时立即创建实例classSingleHungry{//只创建了这一个唯一的实例privatestaticSingleHungryinstance=newSingleHungry();publicstaticSingleHungrygetInstan......
  • JSON for java入门总结
    一、JSON介绍JSON(JavaScriptObjectNotation),类似于XML,是一种数据交换格式,比如JAVA产生了一个数据想要给JavaScript,则除了利用XML外,还可以利用JSON;JSON相比XML的优势是表达起来很简单;官网:http://www.json.org/JSON是AJAX中的X(就是可以取代XML);     ------出自JSON创......
  • 学习《C和指针》的总结(1)
    一、GDB,我使用的是notepad++,因为它轻量化,再用MinGW作为编译器,配置宏:Compile、Run和GDB。GDB指令:1、b13 :在第十三行打断点2、r:运行代码到第十三行3、n:运行下一行代码4、s:如果下一行是调用函数,使用此指令进入调用函数5、pa:打印变量a的值,执行一次就打一次6......
  • 创建元组的三种方式、字典中的setdefault和get妙用、类中的重载方法__add__()
    创建元组的三种方式#print(tuple([input(),input()]))#print((input(),input()))t=input(),input()print(t)#可以将列表转换成tuple,也可以直接()创建tuple,或者将多个变量赋值给一个值会自动转换成tuple字典中的setdefault和get妙用setdefault类似get方法w=input()......
  • MySQL学习总结
    知者不言,言者不知。1、SQL命令总览可以把SQL分为两个部分:数据操作语言(DML)和数据定义语言(DDL)。(1)数据操作语言(DML)主要是针对表的操作:INSERTINTO-向数据库表中插入数据(增)DELETE-从数据库表中删除数据(删)SELECT-从数据库表中获取数据(查)UPDATE-更新数......
  • java线上应用故障性异常处理,经验总结
    一、摘要由于硬件问题、系统资源紧缺或者程序本身的BUG,Java服务在线上不可避免地会出现一些“系统性”故障,比如:服务性能明显下降、部分(或所有)接口超时或卡死等。其中部分故障隐藏颇深,对运维和开发造成长期困扰。笔者根据自己的学习和实践,总结出一套行之有效的“逐步排除”的方......
  • 《图解密码技术》读后总结
    十分不耐烦,乃为人大病。内容1、密码学家工具箱:对称密码、公钥密码、单向散列函数、消息认证码、数字签名(证书)、伪随机数,这六类密码技术统称为密码学家工具箱。2、编码、位运算与加解密编码:将现实中的东西映射为比特序列的操作称为编码,编码通常是针对文字及图形符号。例如,......
  • 线程池使用InheritableThreadLocal踩坑总结
    一、缘起某天测试环境更新后,有小伙伴反应页面会随机性的发生请求参数为空的情况(request.getParamter为空),但是前端的参数是传了的,而且不能稳定重现,需要在页面上经过一番操作之后才会发生,而当问题重现之后,之前那些可用的页面就变得不可用了,然后就会在可用和不可用之间交替........
  • 第一章总练习题
    要记住:         以后经常要用到上述技巧,把最大(小)值进行转化。记住习题12、13的结论。两个奇函数之和为奇函数,其积为偶函数。两个偶函数之和与积都为偶函数。奇函数和偶函数之积为奇函数。掌握和差化积公式和积化和差公式。    ......