首页 > 其他分享 >Collapsing Strings

Collapsing Strings

时间:2024-03-01 17:44:05浏览次数:16  
标签:题目 trie Collapsing 然后 一个 vector 字符串 Strings

做这道题目的时候学CDQ和整体二分学成傻逼了是吧?我寻思着非要把一整个数组传进去操作,明明一个一个考虑不就好了真的烦躁

题外话,做这道题目的时候,探索出来一个东西,vector要放字符串的话,template可以写char *

最开始的想法是编写一个函数work(vector<char *> a,vector<char *> b),然后\(a\)代表的是\(s_i\),\(b\)代表的是\(s_j\)

考虑统计答案,我们枚举\(26\)个字符中的某一个,然后把\(a\)和\(b\)中以此字符开头/结尾的字符串找出来,递归处理这些字符串的贡献,然后这些字符串与其他的字符串的贡献可以\(O(1)\)算出

但是这个代码非常难写,而且有vector递归,直接爆栈

然后看到了前缀后缀,想到了trie,故转换思路,把所有字符串倒序插入建立trie树,然后把所有字符串放到一个vector中传到递归函数里面类似地统计答案,仍然会MLE

然后想到给每个trie节点都开一个vector,放在全局变量里面,但是好像即使什么元素都没有放,仍然会MLE

好煞笔啊真的,为什么一定要一次性处理所有字符串呢?真的是CDQ和整体二分学傻了,一个一个处理统计答案就好了

另外做这道题目的时候,一定要慢慢地把细节想清楚,不然也会写很久

标签:题目,trie,Collapsing,然后,一个,vector,字符串,Strings
From: https://www.cnblogs.com/dingxingdi/p/18047603

相关文章

  • Codeforces 1830C Hyperregular Bracket Strings
    考虑到区间的限制\([l,r]\)就是要求\([l,r]\)里的字符会在\([l,r]\)里找到匹配。假设还有个区间\([l',r']\)满足\(l\lel'\ler\ler'\),能够发现限制变成了\([l,l'),[l',r],(r,r']\)这\(3\)个区间内的字符能在对应区间内找到匹配。继续,假设\(l\lel'\le......
  • Go 100 mistakes - #41: Substrings and memory leaks
        WeneedtokeeptwothingsinmindwhileusingthesubstringoperationinGo. First,theintervalprovidedisbasedonthenumberofbytes,notthenumberofrunes. Second,asubstringoperationmayleadtoamemoryleakastheresultings......
  • CF316G3 Good Substrings
    题意简述有一个字符串\(s\)和\(n\)条限制,每条限制给出字符串\(t_i\)和两个整数\(l_i,r_i\),要求一个字符串要满足在\(t_i\)中的出现次数要在\([l_i,r_i]\)之间。求\(s\)有多少本质不同的子串满足所有限制。\(|s|,\max|t|\le5\times10^4,n\le10\)分析“本质不同......
  • ABC240Ex Sequence of Substrings
    题意简述有长度为\(n\)的01串,你现在要选出\(k\)个两两无交子串,使得将\(k\)个子串按照出现位置排序后,后者的字典序严格比前者大。最大化\(k\)。\(\bm{n\le2\times10^4}\)。分析首先的首先观察数据范围可知此题应该是个线性根号对数的时间复杂度首先有个显然的\(O(n......
  • CodeCraft-22 and Codeforces Round 795 (Div. 2)C. Sum of Substrings(分类讨论、贪
    感觉分类讨论的能有点弱。遇到复杂一点的分类讨论的题目,代码就写的巨长。首先观察到处在中间位置的1对答案的贡献是11,具体在中间哪个位置是没有关系的。只有两端的两个位置是比较特殊的\(1位置处的1对答案的贡献是10\)\(2位置处的1对答案的贡献是1\)所有我们考虑将最左端第一......
  • Go语言核心36讲 37 | strings包与字符串操作
    在上一篇文章中,我介绍了Go语言与Unicode编码规范、UTF-8编码格式的渊源及运用。Go语言不但拥有可以独立代表Unicode字符的类型rune,而且还有可以对字符串值进行Unicode字符拆分的for语句。除此之外,标准库中的unicode包及其子包还提供了很多的函数和数据类型,可以帮助我们解析各......
  • CF1830C Hyperregular Bracket Strings
    HyperregularBracketStringsLuoguCF1830C题目描述给定一个数\(n\)和\(k\)个区间\(\left[l_i,r_i\right]\in[1,n]\)。我们定义,对于一个长度为\(n\)的,仅由(和)组成的合法括号序列,如果它的每一个区间\(\left[l_i,r_i\right]\)内的子串都是合法括号序列,那么这个......
  • 无涯教程-MATLAB - 字符串(Strings)
    在MATLAB中创建字符串非常简单,实际上,我们已经使用了很多次。例如,您在命令提示符下键入以下内容-my_string='LearnfkPoint'MATLAB将执行上述语句并返回以下输出-my_string=LearnfkPointMATLAB将所有变量视为数组,而字符串则视为字符数组,让我们使用whos命令检查上面创建的变......
  • 无涯教程-Redis - Strings(字符串)
    Redis字符串命令用于管理Redis中的字符串值,以下是使用Redis字符串命令的语法。Strings-语法redis127.0.0.1:6379>COMMANDKEY_NAMEStrings-示例redis127.0.0.1:6379>SETlearnfkredisOKredis127.0.0.1:6379>GETlearnfk"redis"在上面的示例中,SET和GET......
  • [CF1902E] Collapsing Strings
    题目链接考虑拆贡献。显然答案可以拆成对于所有\(s_i\)的每一个后缀的反串,作为前缀在所有串中的出现次数的加和。这个东西字典树维护一下就行了。不知道是谁考场上写哈希赛后被人对着模数卡掉了点击查看代码#include<bits/stdc++.h>#defineFL(i,a,b)for(inti=(a......