摘要:
题意:有一$01$串,$?$既可以表示成$0$也可以表示成$1$,问其所有子串中,问有多少不出现相邻相同字符的子串。 题解:根据题意,合法串一定0101这样的,那么当前位置的1/0肯定是从上个位置的0/1转移过来,如果上个位置的字符和当前相同,那么就重新开始。由此可以写出状态转移方程:\(dp[i] 阅读全文
摘要:
题意:有一字符串,可以将其任意排序,构造完后可以相邻字符两两交换位置,花费为$1$,构造一个复原成原串花费最多的串。 题解:感觉还是不好证明啊,结论就是相同的字符连续在一起一定最优,因为最多只有$4$个字符,所以我们可以全排列,花费就是相对于原串的逆序对数,这里官方题解给的暴力求逆序对的方法感觉很巧 阅读全文
摘要:
题意:有一长度均相同的$01$串集合,每次询问给你一个同长度的$01$串,去和集合中的每个$01$串匹配,若位置$i$的元素相同,则贡献加$w_i$,输出集合中有多少串匹配完后贡献不大于$k$。 题解:集合中元素很少,最多$12$个。先用桶标记集合中的串,然后$O((1<<n)^2)$预处理所有情况 阅读全文
摘要:
题意:有$n$x$n$的矩阵,用$k$x$k$的小矩阵去遍历整个矩阵,求所有$k$x$k$矩阵中遍历时的最小中位数. 题解:二分答案.将原矩阵根据二分的值变成01矩阵,如果元素值不小于$x$就变为$1$,否则就是$0$.对于某个$k$x$k$的小矩阵,统计它的元素和,如果它的和$sum<\lfloo 阅读全文
摘要:
题意:有一颗树,根结点为$1$.$q$个询问,每次问你共有多少经过$u$点且到根节点距离为$d$的点. 题解:这题技巧性好强,我们从根节点遍历整颗树,用时间轴记录搜到和离开的时间$in_i$和$out_i$,同时存入同一深度的所有$in_i$,方便后面计算.对于某个父亲结点$u$,它的一个子树结点为 阅读全文
摘要:
题意:有$n$个人轮流上电梯,电梯送完一个人需要$1$个时刻.电梯有待机和运行两种状态,待机每时刻消耗$E_2$电量,运行每时刻消耗$E_1$电量,若电梯无人使用经过$k$个时刻后会变为待机状态,从待机状态变成运行状态需要消耗$E_3$电量,你可以自定义$k$的值,求出最后一个人走完后的最小消耗总电 阅读全文
摘要:
题意:有$n$个数,可以使任意两个子数组(不重叠)的元素贡献*2,问你操作后整个数组的最大元素和是多少. 题解:假如我们只能操作的一次的话,这题完全可以转换为求最大子段和,即先求出所有元素和,然后再加上最大子段和即可,但是现在我们需要求出两个最大子段和,也就意味着在操作一次的基础上,可以使区间断开分 阅读全文
摘要:
数列分块入门1-9 1. #6277. 数列分块入门 1 分析:分块基本操作,对于整块直接打上标记,询问的时候加上对应块的标记值即可. 代码: #include <bits/stdc++.h> #define ll long long #define fi first #define se seco 阅读全文
摘要:
题意:有一颗树,你需要从根节点开始bfs,将搜到的点按顺序放入栈中,给你一个序列,你需要判断这个序列是否是某一种栈的情况. 题解:存一下序列中每个值的位置,然后对于每个父亲结点,按照所存每个值的位置对儿子进行排序,最后跑bfs判断即可. 代码: #include <bits/stdc++.h> #d 阅读全文
摘要:
题意:有一颗树,每个结点都有一个取值范围$[L_i,R_i]$,答案为所有相邻点的绝对值之差之和,现在要你确定每个点的值,求最大答案. 题解:求相邻点的最大绝对值之差,那么肯定是取两个点的左端点和右端点最优,树形dp板子题. 代码: #include <bits/stdc++.h> #define 阅读全文