![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
字符串
~KIKI~
这个作者很懒,什么都没留下…
展开
-
双哈希
就是构造两个哈希函数,然后将结果记为pair存map,能够进一步减少冲突率例题:Birthday Cake题意给你n个串,问有几对串可以拼成形如AA串。思路先对所有串跑一个哈希,然后遍历所有串,如果该串是ABA型那么就去找B的个数,自然溢出法还差一点,双哈希就过了。ac代码#include<bits/stdc++.h>using namespace std;#define endl '\n'#define ll long long#define ull un原创 2021-05-16 16:12:53 · 1451 阅读 · 3 评论 -
M型字符串
题目链接:点这里~题目大意给你一个字符串s,问你有多少个前缀si满足si是由两个一摸一样的且是回文串拼接成的,这两个串可以是首尾共享一个字符。字符串长2e5。思路只有一组样例,长度也才2e5,可以直接顺着跑一边哈希,倒着跑一边哈希,然后直接枚举长度,分两种情况判断即可。ac代码#include<bits/stdc++.h>using namespace std;mt19937_64 rng(time(0));#define io cin.tie(0);ios::s原创 2021-03-29 11:14:05 · 516 阅读 · 0 评论 -
牛客练习赛79 回文字D
题目链接:牛客练习赛79 D题目大意定义一个D型回文串S:S长度小于D称之为D型回文,S长度大于等于D,且任意长度为D的子串都是回文称之为D型回文。问你一个字符串S最少能分成几个连续的子串,都是D型回文?思路其实就是将连续的D型回文拼到一起,看最后有几个D型回文团,比如[1,2,3,4,5,6](下标),如果[1 2]回文,[2 3]回文,[3 4]不回文,[4 5]回文,[5 6]回文,那么前两个和后两个可以拼到一起,就是[1 2 3], [4 5 6]这几个D型回文串。判断回文就原创 2021-03-27 13:57:30 · 97 阅读 · 0 评论 -
牛数(ac自动机+数位dp)
题目链接:牛客IOI周赛23-提高组B题目大意给你n个数字串,定义牛数x,n个数字串都不是x的子串。然后给你一个长度为2000的数字s,问你[1, s]之间牛数有多少个。思路多个模式串匹配主串,就自然而然地会想到ac自动机了,然后问你[1,s]之间满足条件的数的个数,那么就是数位dp了,不过这里的数位dp要在Trie树上跑,还要注意判断前导零。ac代码#include<bits/stdc++.h>using namespace std;#define io cin.原创 2021-03-13 18:56:33 · 380 阅读 · 0 评论 -
P1481 魔族密码 (字典树 模板)
题目链接:https://www.luogu.com.cn/problem/P1481题意给你n个单词。 如果在一个由一个词或多个词组成的表中,除了最后一个以外,每个单词都被其后的一个单词所包含,即前一个单词是后一个单词的前缀,则称词表为一个词链。 求最长词链所包含的单词数。思路字典树模板题。 插入完了过后求一下经过的总的字符串个数,并更新其最大值AC代码数组篇#include<bits/stdc++.h>using namespace std;const i原创 2020-08-07 19:15:26 · 257 阅读 · 0 评论 -
九峰与子序列(字符串哈希+dp)
题目链接:点这里~题目大意n个字符串,一个主串s,问多少个子序列串能够拼接成主串s?n<=40, 1<=|s|<=5e6思路这个dp有01背包的思想,dp[i][j]表示前i个字符串能够拼接成s的前j个字符的个数,与01背包不同的就是用到了字符串哈希判断是否相等。tmp是字符串的哈希值,len是字符串的长度,如果tmp等于主串s的子串get(j - len + 1, j)的哈希值,说明可以放最后组成s的前j个字符,那么dp[i][j]+=dp[i-1][j-le原创 2021-02-20 23:04:01 · 180 阅读 · 1 评论 -
武辰延的字符串(二分+字符串哈希)
题目链接:点这里~题目大意给你两个字符串s,t,表示字符串s的长度为i的前缀,同理。问满足的{i, j}有多少种组合。1<=|s|,|t|<=1e5思路s1,s2是模式串,t是主串。暴力枚举s1,二分长度查找s2,字符串比较用哈希。获取子串的Hash:has=((hash[r]-hash[l-1]*p^(r-l+1))%mod+mod)%mod;(如果需反复求解子串hash,则对p的次方进行预处理效果更佳)ac代码#include<bits/stdc++.h&原创 2021-02-20 13:08:28 · 225 阅读 · 1 评论 -
zcmu 1550( 字符串的最小表示法)
题目链接:https://acm.zcmu.edu.cn/JudgeOnline/problem.php?id=1550题目大意给你你个字符串s,他可以循环左移,问最少左移几次之后的字符串字典序最小。循环左移,比如s是(adac)那么左移可以是adac,daca,acad,cada。这里字典序最小是acad,那么需要左移3次。思路O(n^2)会超时,这里介绍一种O(n)的做法i,j是两个指针,表示两个字符串首字母位置。k表示两个字符串最长公共前缀长度,由于两个数组需要比较字典序,所以原创 2021-01-15 16:37:15 · 210 阅读 · 0 评论 -
牛客巅峰赛第五场 黄金&钻石&王者
题目链接:https://ac.nowcoder.com/acm/contest/6489A-完全平方数的尾巴题意:判断给定的数x(0<=x<=999)是不是由某个完全平方数对1000取模的结果样例:hint:该题就是打个表,给1到500(这个也可以更大)的平方对1000取模的值标记为true,然后直接输出a[i*i%1000]就好了。AC代码:class Solution {public: bool solve(int x) { ...原创 2020-07-24 14:28:00 · 113 阅读 · 0 评论 -
牛牛的字符串反转
题目链接:https://ac.nowcoder.com/acm/contest/6779/A题意有一个1~n的序列A,现在将其循环右移k次,得到序列B 反转操作是将某一区间的字符反转,比如12345要将[2,4]反转,得到14325 问最后将序列A反转几次后得到序列B思路多写几个就会得到结果先让k对n取余,得到1相对平移的个数,然后将最终状态反转到初始状态,反转次数一样当k==0时,说明不需要反转就能得到当n==2时,如果k!=0那么就是1,反转一次就能得到当k<.原创 2020-08-07 11:30:31 · 199 阅读 · 0 评论 -
2020上海高校程序设计竞赛暨第18届上海大学程序设计联赛夏季赛(同步赛)解题报告ABCEG
题目链接:https://ac.nowcoder.com/acm/contest/6871A-同源题意思路AC代码B-分子题意求有机分子式量。一个C 原子的式量为13 ,一个H 原子的式量为1 ,一个O 原子的式量为17 。一个有机分子的式量恰为各个原子的式量的总和。 原子后面带有数字表示原子的个数,括号后面带有数字表示整体的个数 括号不嵌套括号思路字符串模拟。 带有括号的分开模拟,一块一块计算,这里写了个cal函数,不带括号的处理方式一样的 注意...原创 2020-08-06 10:50:54 · 315 阅读 · 0 评论 -
牛客算法周周练17 DE
题目链接:https://ac.nowcoder.com/acm/contest/6607#questionD-刺客信条题意:求S到E花的最短时间,a[i][j]表示经过的时间,ABC需要花费100。hint:bfs+优先队列搜最短路 (优先队列的两种应用)#include <bits/stdc++.h>using namespace std;#define LL long long#define PII pair<int, int>#de...原创 2020-07-29 11:00:46 · 135 阅读 · 0 评论 -
2020牛客暑假多校第二场(解题报告)
Fake Maxpooling题意:给你大小为n*m的矩阵,Ai,j大小是i,j的最小公倍数,其中(1<=i<=n,1<=j<=m),求所有k*k的子矩阵的最大值之和输入:3 4 2输出:38hint:二维的滑动窗口,直接用单调队列做...原创 2020-07-21 10:54:27 · 485 阅读 · 0 评论 -
牛客暑期多校训练营(第一场)F
Infinite String Comparision题意:多组输入。给你两个字符串,每个字符串可以以自身为单位无限延长, 试问:延长之后的两个字符串字典序大小输入:aabzzzzzabaabaa输出:<=>第三个样例。abaabaaba...与abaaabaaabaa相比字典序 <hint:数据弱。分别扩充两倍再比较字典序大小就好了。AC代码:#include<bits/stdc++.h>...原创 2020-07-13 20:03:14 · 125 阅读 · 0 评论