随笔分类 - 其他 - 思维题
摘要:这个可以爆搜,如果搜出来环的话就一定不合法. 这个时间复杂度是 $O(n^4)$ 的. 但是我们发现,如果向右侧搜的话右侧许多方块会把很多状态都提前搜出来了. 所以我们可以从左向右枚举,搜左面.从右向左枚举,搜右面. 这样时间复杂度就是 $O(n^3)$ 的了. code: #include <bi
阅读全文
摘要:题意:给定一个数列,单点修改,求大于 $b_{i}$ 的极大连通块数目. 有一个常见的套路:考虑 $i$ 与 $i-1$. 当新加入 $i$ 时,$1$ ~ $a[i]$ 部分都新加入了一个连通块,然后我们发现我们多加了 $1$ ~ $min(a[i-1],a[i])$ 这一部分. 那么这就对应了一
阅读全文
摘要:这个题求完斯坦纳树后再搞一个类似于子集 DP 就行了. 我写的好像有点麻烦,但本质是相同的. code: #include <bits/stdc++.h> #define N 3006 #define M 13 #define inf 0x3f3f3f3f #define ll long long
阅读全文
摘要:这道题和网络收费那道题的套路是一样的. 都是直接枚举每一个点的状态. 但是要注意:这里枚举每个点的状态是基于 dfs 的,所以有递归式:$f(T)=4\times f(\frac{T}{2})$ (算两次) 那么就有 $f(ROOT)=4^n$. 这个是仅考虑 dfs 部分的复杂度,要是把背包部分算
阅读全文
摘要:神仙题!!!! 其实还是有一点没有搞懂,但是大体上差不多懂了. code: #include <bits/stdc++.h> #define ll long long #define N 3200020 #define setIO(s) freopen(s".in","r",stdin) using
阅读全文
摘要:显然,我们可以将每个东西的 $a,b$ 属性转换成二维坐标系中的点. 那么我们每次查询的时候查的是一个右下角矩阵. 没有被套的数量等于矩阵内总数量减去矩阵内可以套其他物品的数量. 我们考虑按照 $a$ 从大到小依次处理. 那么对于 $(x,y)$ 来说,显然匹配一个 $(x',y')$ 满足 $y'
阅读全文
摘要:好神仙的一道题! 由于每个门对应的钥匙仅有一把,所以我们可以确定门和门之间的相对解锁顺序. 比如,解锁门 $(x,x+1)$ 的要是在 $[1,x]$ 之间的话 $x+1$ 无论如何也到不了 $x$ 这一侧,但是 $x$ 有可能可以到达 $x+1$ 这边. 所以我们就先去解锁 $x+1$,然后再去解
阅读全文
摘要:这道题真考验一个人的数学感知啊..... 看到 $\frac{b- \sqrt d}{2}$ 的形式就要想到这是一个一元二次方程的一个根之一,然后去解. 想到这一步的话就好做了,因为我们可以列一个关于 $n$ 的递推式,然后矩阵乘法加速即可. 代码就不贴了....
阅读全文
摘要:显然,如果不出现重复数字的话直接贪心填就是正确的. 然而,当出现重复数字时这个贪心就错了. 将这个问题抽象成树是显然的. 我们先将所有数从大到小排. 对于大小为 $size[i]$ 的 $i$ 来说,肯定选当前能选的第 $size[i]$ 大的. (设为 $x$) 那么,选择完 $x$ 后,显然 $
阅读全文
摘要:大大大数据结构题. 我们发现,如果 $k=2$,答案就是树的直径. 而 $k>2$ 时,相当于选择 $k$ 个叶子,使得这些叶子的并最大. 我们有一个显然的贪心:$k+1$ 的答案一定是在 $k$ 的答案上加一个叶子. 如果不考虑修改,这其实就是长链剖分. 即 $k$ 时的答案就是大小为前 $k$
阅读全文
摘要:这种出现异或的题一般来说都是进行二进制拆位,然后按位考虑的. 我们考虑第 $i$ 位是否为 1. 不妨模 $2^{i+1}$,排除前面的影响. 那么一对 $a[k]+b[k]$ 中第 $i$ 位为 1 的条件是: 1. 由后面进位,得 $i$ 位为 1. 2. 两个位置都是 1,但是进位后还是 1.
阅读全文
摘要:好神仙的数据结构题呀! code: #include <cstdio> #include <cstring> #include <vector> #include <cmath> #include <algorithm> #define BL 250 #define N 100006 #define
阅读全文
摘要:CF1305C 题解: 我们发现虽然 $n$ 很大,但是模数很小,所以相当于 $n$ 个数对 $m$ 取模后不能有重复数字. 那么其实这个 $n$ 最大也就是 $m$ ,直接 $O(m^2)$ 暴力算就行了. code: #include <bits/stdc++.h> #define ll lon
阅读全文
摘要:我们发现,如果我们打数字牌后,就不能打 0 了. 分两种情况讨论即可. code: #include <bits/stdc++.h> #define N 200008 #define ll long long #define setIO(s) freopen(s".in","r",stdin) us
阅读全文
摘要:如果 $k$ 值确定的话,我们直接来一个 $O(n)$ 的贪心就行. 那么我们就将 $k$ 分为大于 $B$ 和小于 $B$ 两部分处理. 对于小于 $B$ 的部分,暴力处理,复杂度为 $O(nB)$. 对于大于 $B$ 的部分,取值分别为 $[0,\frac{n}{B}]$ 且依次递减. 那么我们
阅读全文
摘要:这道题的数据范围中有两个需要注意到的点: 1. 边都是由编号小的点连向编号大的点. 2. 总点数只有 $10^5$ 个. 所以我们可以考虑采取根号分治的做法: 对于点数大于 $\sqrt n$ 的部分,直接跑一个 $O(n)$ 的 DP. 对于点数小于 $\sqrt n$ 的部分,提前预处理. 这样
阅读全文
摘要:这种问题设最裸的状态就好了. 令 $f[i][j]$ 表示 $i \times j$ 矩阵的答案. 然后直接转移就行了. code: #include <bits/stdc++.h> #define N 3004 #define ll long long #define mod 1000000007
阅读全文
摘要:好神仙的一道字符串题! 由于后缀自动机+线段树合并的题做多了,看到复杂字符串的时候直接往 right 集合和后缀树那方面想了. 所以就没想出来 QAQ.... 这道题还是要从序列上来思考. 我们发现最优解一定可以表示成一个长度依次为 $1$ ~ $ans$ 字符串集合. 令 $dp[i]$ 表示以
阅读全文
摘要:朴素的高斯消元是 $O(n^3)$ 的,但是由于叶节点是终止节点,所以可以逐层向上推成 $k\times f(fa)+b$ 的形式. 推到根节点时直接取根节点的 $b$ 值就可以了. code: #include <cstdio> #include <cstring> #include <algor
阅读全文
摘要:维护 $dp[i]$ 表示长度为 $i$ 的 $LIS$ 的最小结尾长度. 然后每次我们新加入一个区间 $[l,r]$ ,这个可以用平衡树来维护:区间平移,区间+1,单点赋值. 调不出来QAQ.... code: #include <cstdio> #include <string> #includ
阅读全文

浙公网安备 33010602011771号