cojs 疯狂的字符串 题解报告】的更多相关文章

首先这道题是GT考试的加强版本QAQ 当n<k的时候,答案显然是10^n 当n=k的时候,答案显然是10^n-1 这样就有20分辣 之后我们考虑k<=20的做法 显然设f(i,j)表示前i位匹配到了第j位 之后用KMP来转移就可以了 如果不用矩阵乘法优化的话时间复杂度O(n*k*10) 如果用矩阵乘法的话时间复杂度O(k^3logn) 其实就是GT考试的做法辣 这样就有50分了 之后我们考虑用dp来容斥 设fi表示前i位且第一次匹配的位置是[i-k+1,i]的方案 不难发现fi=m^(i-k)…
OwO 题目含义都是一样的,只是数据范围扩大了 对于n<=7的问题,我们直接暴力搜索就可以了 对于n<=1000的问题,我们不难联想到<主旋律>这一道题 没错,只需要把方程改一改就可以了 首先我们考虑不合法的方案强连通分量缩点后一定是DAG 考虑子问题:DAG计数 做法可以参考<cojs DAG计数1-4 题解报告> 这里给出转移方程 f(n)=sigma((-1)^(k-1)*C(n,k)*2^(k*(n-k))*f(n-k)) 如果考虑上强连通分量缩点的情况呢? 我…
OwO 良心的FFT练手题,包含了所有的多项式基本运算呢 其中一部分解法参考了myy的uoj的blog 二分图计数 1: 实际是求所有图的二分图染色方案和 我们不妨枚举这个图中有多少个黑点 在n个点中选出k个黑点的方案为C(n,k) 白点和黑点之间任意连边,方案为2^(k*(n-k)) 所以得到f(n)=sigma(C(n,k)*2^(k*(n-k)) 由于本题只需要求解一个f(n),枚举并计算就可以了 更高端一点的做法是这样的: 我们可以利用在<DAG计数问题 题解报告>中提到的技巧将n*k…
疯狂的重心 话说做过幻想乡战略游戏的人应该很容易切掉这道题目吧 我们考虑一棵树如果添加了一个叶子,那么其重心最多向叶子方向移动1的距离 而是否移动我们只需要记录子树中有多少个点就可以判断啦 也就是说这个叶子对于时间复杂度的贡献是1 那么我们考虑每次在x-y上添加一条边,等于将x所在的树和y所在的树合并 这一步我们可以采用启发式合并,每次把小的向大的里插 这样暴力合并的时间复杂度是O(nlogn) 也就等价于我们最多插入单个节点O(nlogn) 那么对于重心的计算显然也是O(nlogn)的 那么现…
QAQ 从IOI搬了一道题目过来 官方题解貌似理论上没有我的做法优,我交到BZOJ上也跑的飞快 结果自己造了个数据把自己卡成了4s多,真是忧桑的故事 不过貌似原题是交互题,并不能离线 说说我的做法吧 首先我们会写暴力,而我的做法只要会写暴力就可以了 对于一个询问A,B 我们有以下几种方法: 1.搞出所有颜色是A的DFS序对应区间的左右端点和所有颜色是B的DFS序对应区间的左右端点 然后把所有端点排个序,线性扫一遍,维护一个扫描线cnt,当遇到A的左端点时++cnt,遇到A的右端点时--cnt 遇…
最近突然有很多人来问我这些题目怎么做OwO 然而并不是我出的,结论我也不是很懂 研究了一下觉得非常的一颗赛艇,于是就打算写这样一篇题解 DAG 1 我们考虑DAG的性质,枚举出度为0的点 设出度为0的点有k个,则一共有C(n,k)种方案 对于剩下的(n-k)个点和这k个点之间可以任意连边,方案为2^(k*(n-k)) 去掉这k个点之后剩下(n-k)个点仍然是DAG,方案为f(n-k) 则方案数为C(n,k)*2^(k*(n-k))*f(n-k) 考虑到剩下的(n-k)个点中也可能有出度为0的点,…
题目描述非常的清晰 首先我们考虑(A*B)^m的求法,这个部分可以参考BZOJ 杰杰的女性朋友 我们不难发现(A*B)^m=A*(B*A)^(m-1)*B A*B是n*n的矩阵,而B*A是k*k的矩阵,这样就大大缩小了矩阵的大小 因为矩阵乘法满足结合律,我们先对(B*A)做快速幂,之后乘一下就可以了 之后我们考虑如果没有(i-1)^3的这个系数怎么求G(i)的前缀和 因为矩阵乘法满足分配率,我们利用矩阵倍增((B*A)^0+(B*A)^1……+(B*A)^(m-1))之后乘一下就可以了 之后我们…
2015浙江财经大学ACM有奖周赛(一) 题解报告 命题:丽丽&&黑鸡 这是命题者原话. 题目涉及的知识面比较广泛,有深度优先搜索.广度优先搜索.数学题.几何题.贪心算法.枚举.二进制等等... 有些题目还需要大家对程序的效率做出优化..大一的小宝宝可能有一些吃不消..当成是一种体验就好了. 题解目录: ZUFE OJ 2307: 最长连续不下降子串 ZUFE OJ 2308: Lucky Number ZUFE OJ 2309: 小明爱吃面 ZUFE OJ 2310: 小明爱消除 ZUF…
「题解报告」 P3167 [CQOI2014]通配符匹配 思路 *和?显然无法直接匹配,但是可以发现「通配符个数不超过 \(10\) 」,那么我们可以考虑分段匹配. 我们首先把原字符串分成多个以一个通配符开头的字符串,如将 happy*birthdey?xingchen 分成: happy *birthday ?xingchen 然后设原串有 \(m\) 个通配符, \(op_i\) 表示分出来的第 \(i\) 个串前的通配符(\(0\) 没有,\(1\) 是?,\(2\) 是*),\(len_…
最长重复字符串题解 package main import ( "fmt" "strings" ) type Index map[int]int type Counter map[string]Index var c = make(Counter) func setRecord(match string, index int) { i, ok := c[match] if !ok { i = make(Index) c[match] = i return } i[i…