摘要:
题目链接 #题目大意 给你一个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 阅读全文