字符串
实用
可爱美少女
ccpc绵阳铜,icpc西安银,jscpc江苏金。
展开
-
CFdiv2-Compress Words-(双哈希)
E题意: 就是给你n个字符串,然后依次把他们拼接起来,拼接的同时,如果前面的串后缀和后面的串前缀有共同的,那么就删去,再拼接。问你最后拼接完的串是什么样的。思考: 刚开始我还以为直接枚举从哪开始匹配然后删,一看复杂度n*n的。然后对于拼接一个串怎么看公同最长多少呢。首先a串的最后一个肯定是比看的,b串的最开始的肯定是必看的。那么就从a串的最后一个往前走,b串的第一个往后走,这样就线性的维护每个点的值都加起来,判断是否相同就行了。哈希的时候最左边的肯定都是次幂高的。然后值得注意的就是,当前不同的时候不代表再往原创 2022-07-12 16:10:00 · 73 阅读 · 0 评论 -
2020湖南省赛-String Commutativity-(KMP求最小循环节)
D 题意: 就是给你n个字符串,问你有多少对i<j,满足si+sj = sj+si。 思考: 推了推发现只要两个字符串的最小循环一样,那么他俩就可以合并,那么现在就是如何去求最小循环,那么就是KMP求最小循环节的板子。 代码: #include<bits/stdc++.h> #define fi first #define se second #define pb push_back #define db double #define int long long #define PII p原创 2022-05-05 14:02:40 · 192 阅读 · 0 评论 -
牛客月赛13-小A的回文串-(manachar)
B 题意: 就是给你一个字符串,然后可以从中间某个地方切开,前面的接到后面,问你操作后最长的回文子串,当然也可以不操作。 思考: 数据范围比较大,n方之后就只能用manachar做了。 代码: int T,n,m,k; int va[N]; int Manacher(string s) { string t = "$#"; for (int i = 0; i < s.size(); ++i) { t += s[i]; t += "#"; }原创 2022-03-01 18:18:08 · 91 阅读 · 0 评论