2021年10月13日
摘要: 1006 摘要:后缀 快速幂 DP 如何计算字符串中特定子序列的个数? 利用关系 \[ dp[j][i]=dp[j][i-1]+dp[j-1][i-1]*(s[i]==as[j]) \] $dp[j][i]$指文本串前 \(i\) 个字符中"\(nunhehheh\)"的个数,复杂度为 \(O(MN 阅读全文
posted @ 2021-10-13 20:21 Stuart_Assassins 阅读(27) 评论(0) 推荐(0)
2021年10月8日
摘要: #include<bits/stdc++.h> using namespace std; typedef long long ll; ll T,n,m,p; ll s[100]; void process(){ memset(s,0,sizeof(s)); s[0]=n; for(int i=0;s 阅读全文
posted @ 2021-10-08 15:36 Stuart_Assassins 阅读(41) 评论(0) 推荐(0)
2021年8月26日
摘要: 位运算和枚举 思路 首先明确 \[ A+B=A|B + A\&B \] 因为加法性质没有位运算来得好,我们把数据处理一下就得到了待求数组相邻两位的与和或,因为确定了第一个数 \(a1\) 就是确立了整个序列,所以我们依次枚举 \(a1\) 的每一位为0或1就可以了,时间复杂度为 \(O(an)\)( 阅读全文
posted @ 2021-08-26 09:53 Stuart_Assassins 阅读(56) 评论(0) 推荐(0)
2021年8月13日
摘要: 字符串哈希和子串匹配 对于一个字符串来说,它的哈希值算法为 #define ULL unsigned long long const ULL P = 13331; ULL GetHash(char *s) { int Len = strlen(s); ULL Hash = 0; for (int i 阅读全文
posted @ 2021-08-13 16:29 Stuart_Assassins 阅读(168) 评论(0) 推荐(0)
2021年8月9日
摘要: 1005 思维 首先那些中位数本身肯定要放进去,从$1-n$中选取完之后连续序列会裂成一个个段落。显然,两个段落对于其中间的那个set是可以两两配对抵消的(不一定要相邻)。这样分配完之后不一定会正好配完,那么: 1.这些段落长度中不存在大于段落长度总和一半的元素。那么可以断言,这些段落最后只会全部匹 阅读全文
posted @ 2021-08-09 22:05 Stuart_Assassins 阅读(23) 评论(0) 推荐(0)
摘要: 1011 Segment Tree with Pruning 题意:限制区间长度为$k$,并给定建树区间为 \((1-n)\),询问该线段树会产生几个节点。 是一道搜索题(刚开始还以为是结论题)。加入记忆化搜索优化时间复杂度,对每一个子树仅打开一次。因为线段树本身仅可能会有$logN$个长度不同的区 阅读全文
posted @ 2021-08-09 22:03 Stuart_Assassins 阅读(36) 评论(0) 推荐(0)