「题解报告」 P3167 [CQOI2014]通配符匹配 思路 *和?显然无法直接匹配,但是可以发现「通配符个数不超过 \(10\) 」,那么我们可以考虑分段匹配. 我们首先把原字符串分成多个以一个通配符开头的字符串,如将 happy*birthdey?xingchen 分成: happy *birthday ?xingchen 然后设原串有 \(m\) 个通配符, \(op_i\) 表示分出来的第 \(i\) 个串前的通配符(\(0\) 没有,\(1\) 是?,\(2\) 是*),\(len_…
题目 题目大意 给出一个字符串,其中包含两种通配符 ‘?’和 ‘*’ ,‘?’可以代替一个字符,‘*’可以代替一个字符串(长度可以为0) 然后给出几个字符转,判断能否用给出的字符串表示出来 样例解释 给出字符串:*aca?ctc 判断字符串 :acaacatctc 此时用 * 代替 aba 用 ?代替了t,所以输出YES 解题思路 dp + hash 用hash预处理出字符串的前缀和, 方便判断两端字符是否相同 假设 给出字符串 为str1,  要判断的字符串为 str2 f[i][j]表示 第…
题解 P4577 [FJOI2018]领导集团问题 题解区好像没有线段树上又套了二分的做法,于是就有了这片题解. 题目传送门 怀着必 WA 的决心交了两发,一不小心就过了. 题意 求一个树上最长不下降子序列. 思路 首先考虑裸的 dp:设 \(f_{u,j}\) 表示以 \(u\) 为根的子树里选的数的最大值不小于 \(j\) 能选多少个. \[f_{u,j}= \begin{cases} \sum_\limits{v\ is\ u's\ son}f_{v,j} &j>w_u\\ \max\…
P2154 虔诚的墓主人 题解 原题传送门 题意 在 \(n\times m\) 一个方格上给你 \(w\) 个点,求方格里每个点正上下左右各选 \(k\) 个点的方案数. \(1 \le N, M \le 1,000,000,000,0 \le x_i \le N,0 \le y_i \le M,1 \le W \le 100,000,1 \le k \le 10\). 思路 首先看到 \(N,M\) 这么大,肯定要先离散化一下. 然后考虑怎么求方案数. 我们先对离散化后的点排个序,然后考虑两…
题解 SP16185 Mining your own business 原题传送门 题意 给你一个无向图,求至少安装多少个太平井,才能使不管那个点封闭,其他点都可以与有太平井的点联通. 题解 其他题解里都说要用"点双连通分量",其实不用. 我们先用tarjan求出所有割点,然后我们假设所有的割点都坍塌掉了,整张图就被我们分成了许多联通块,我们可以用暴搜找出所有联通块.每个联通块与割点有如下关系(s表示一个联通块的点的数量): 这个联通块与0个割点直接连接:说明这个联通块与其他联通块不相…
P3503 Blocks 题解 原题传送门 思路 首先我们可以发现,若 \(a_l\) ~ \(a_r\) 的平均值大于等于 \(k\) ,则这个区间一定可以转化为都大于等于 \(k\) 的.我们就把这个问题化简成了"求最长的平均值大于等于 \(k\) 的子序列". 再去化简,可以发现,如果我们把序列中的每一项都减去 \(k\) ,再求前缀和 \(s\) ,若 \(s_i-s_j\ge 0\) ,则区间 \((j,i)\) 一定满足条件. 那么我们考虑如何求这种区间. 不难发现,若 \…
P3354 题解 题目传送门 一道很恶心的树形dp 但是我喜欢 题目大意: 一片海旁边有一条树状的河,入海口有一个大伐木场,每条河的分叉处都有村庄.建了伐木场的村庄可以直接处理木料,否则要往下游的伐木场运,运费为每吨每千米 \(1\) 分钱.现在要在一些村庄建 \(k\) 个伐木场,求建完之后最小的运输费用. 设计状态: \[f(u,z,k,l): \begin{cases} u:以第i个点为根的子树 \\ z:离点i最近的伐木场的位置(祖先) \\ k:该子树被分配了k个伐木场 \\ l:0或…
大佬们的题解都太深奥了,直接把转移方程放出来让其他大佬们感性理解,蒟蒻们很难理解,所以我就写了一篇让像我一样的蒟蒻能看懂的题解 原题传送门 动态规划三部曲:确定状态,转移方程,初始状态和答案. --神仙 @akicc 第一步 确定状态 \(f_{i,j,k}(k\in\{0,1,2\})\)表示第 \(i\) 个数选为 \(j\) 且和前一个数是小于/等于/大于(\(k=0\) 是大于,\(k=1\) 是等于,\(k=2\) 是小于)的关系时的方案数. 第二步 转移方程 把三种关系分开讨论: \…
吐槽 本来是去写AC自动机的,然后发现数据范围每个串100000,有100个串(???),连塞进trie树里都塞不进去,玩个鬼的AC自动机啊,tag不要乱打啊 最后拿字符串hash+爆搜一发搜过去了... 思路 挺恶心的搜索吧 考虑分段,按?号和*号分段,对于每段内的hash判断是否一致,*号和?号按题意处理即可 然后边界不要写挂就好了 代码 #include <cstdio> #include <cstring> #include <algorithm> using…
原题传送门 神奇的5分算法:直接输出样例. 20分算法 直接把每个点是否有牛的状态DFS一遍同时判断是否合法,时间复杂度约为\(O(2^{n^2})\)(因为有判断合法的剪枝所以会比这个低).而在前四个测试点中\(N\le4\),用枚举算法在最坏情况下需要运行\(65536\)次,时间非常富裕,但是在之后的测试点中就会超时了. 50分算法 每四个方格内都有\(C^2_4=6\)种方法放置牛: 1 2 3 4 5 6 CC C. C. .C .C .. .. C. .C C. .C CC DFS每…