08 2021 档案
摘要:题目链接 #题目大意 给你n个商品,对于每个商品可以选择三个操作之一: 1.以这个商品价格买入这个商品 2.如果之前买过某商品以这个商品价格卖出一个商品 3.什么也不做 #解题思路 先讲一个别的问题。对于A, B, C, D四个数,任你选出几对数求最大差值, 如果$A<B<C, B>D$,是有两种选
阅读全文
摘要:题目链接 #题目大意 给你一棵以1为根的树,询问树上两点之间的路径点权在[a,b]之间的点权和。 #(假的)解题思路1 树剖+主席树 看到题目就想到树剖+主席树,树剖之后按照dfs序建主席树,主席树用来维护权值信息,树剖用来查询链上的权值和(常数爆炸,卡时间过的)。 const int maxn =
阅读全文
摘要:题目链接 #题目大意 给你一个初始字符串s,你可以删除字符串s中的某个字符(比如删除'a'就是把s中的所有'a'删掉)得到一个字符串t,把t拼接到s后面,再在t中删除其他字符,继续拼接到s后面直到t为空,给你最后拼接出的数字,让你还原原来的数字并输出字符的删除顺序。 #解题思路 感觉输出字符的删除顺
阅读全文
摘要:题目链接 #题目大意 给你一个n,求最多包含k个不同数字且大于等于n的最小的数。 #解题思路 我们想要符合条件的数字尽量小,可以想到的一个暴力方法就是不断的让n加1,直到符合条件为止,观察最后得到的数,不难发现其结果要么是等于原数,要么是前面某一位比n大,然后后面全是k个不同数字中最小的数,所以我们
阅读全文
摘要:题目链接 #题目大意 给你一个字符串,你可以标记一个子序列,子序列中的字符不能相邻,剩下的删除掉,问最后能形成多少种不同的子序列。 #解题思路 可以设dp[i]表示以i结尾并且最后剩下的子序列有第i位时有多少不同的子序列。设dp[1] = dp[0] = 1, 那么我们的状态转移方程就是$dp[i]
阅读全文
摘要:题目链接 #题目大意 给你n个区间,让你每个区间选一个数,选的数不能重复。 #解题思路 看到题的第一眼肯定是想大力贪。怎么贪呢?对于每个区间来说,尽可能的选靠左或者靠右的数?好像都不太对的样子。 我们考虑将所有区间的左端点排序,然后用一个指针从最小的左端点往右移,每存在一个以当前指针为左端点的右端点
阅读全文
摘要:题目链接 #题目大意 模拟一下multiset,一共有两个操作: 1.插入一个数 2.删除第k小的数 #解题思路 用权值树状数组来维护,主要是新学了树状数组倍增的方法,可以比二分少一个log来查找第k小的数,maxn不一定得是2的幂,但得保证一定能枚举到范围内的所有数,即枚举的最大的2的幂的2倍要比
阅读全文
摘要:#题目大意 有一个树形的迷宫,从节点1开始走,每个节点都有$k_i$的概率回到1,$e_i$的概率逃出迷宫,每个房间有$m$条边相连,求走出迷宫所需步数的期望。 #解题思路 设走出迷宫步数的期望为$E_i$,父亲为$F_i$,儿子为$S_i$,相邻的节点个数为$m$,则$E_1$即为所求。 对于叶子
阅读全文
摘要:题目链接 #题目大意 有一场足球赛,一共有$n$轮,上一轮胜出的队伍与这一轮与其相邻的队伍比赛(1和2,3和4) 给你任意两个队比赛会获胜的概率,求最后那个队获胜的概率最大。 #解题思路 第一轮两个队之间有一个会获胜,第二轮四个队之间有一个会获胜,第三轮8个队之间有一个会获胜...第一轮分成人数为1
阅读全文
摘要:题目链接 #题目大意 $i$和$j$是树上不同的两个点,计算下面公式的值 #解题思路1(点分治) 如果用点分治的话,很容易想到可以把重心当$lca$来计算子树间的贡献。因为题目是有根树,所以在点分治的过程中,可能会有某个子树的父子关系是颠倒的,不过对于点分治以重心$u$为根的子树来说,这种子树只会有
阅读全文
摘要:题目链接 #题目大意 有一棵以1号点为根的树,每个树上有一定的苹果,你可以在树上来回走k步,问最多拿多少种苹果。 #解题思路 每个点一共有三种状态,一种是经过这个点一共走x步到了某个点,一种是回到这个点,一种是没回到这个点。 状态表示: dp[i][j][1]: 回到了i点,一共在i的子树中走了j步
阅读全文
摘要:题目链接 #解题思路 板子题,二分那里坑了,一定要注意一下。 const int maxn = 1e5+10; int n, m, a[maxn]; struct Node { int s[2], v, sz, p; void init(int _v, int _p) { v = _v, p = _
阅读全文
摘要:题目链接 #解题思路 板子题,考察对$splay$的插入,删除,区间修改,区间翻转,区间求和,区间求最大子段和的基础操作。 const int maxn = 1e6+10; int n, m, a[maxn]; struct Node { int s[2], v, p, sz; int sum, s
阅读全文
摘要:题目链接 #解题思路 题目相当于询问每个点所属集合的第$k$小的数的编号,查询某个数属于哪个集合可以用并查集来解决。题目还涉及了集合之间的合并,由于合并之后集合的元素会改变,所以需要动态询问第$k$小,可以用平衡树来解决。另外,在集合合并的时候需要用启发式合并,把小集合合并到大集合上,这样可以把时间
阅读全文

浙公网安备 33010602011771号