随笔分类 - 学习总结
摘要:P6811 「MCOI-02」Build Battle 建筑大师 诸如这样的序列长为 \(n\):\(1,2...,m-1,m,1,2,...,m-1,m,1,2,3\) 我们称 \(1,2,...,m-1,m\) 为一个块。 问有多少本质不同的子序列。 如果我们把每个子序列往原序列里面填,每个子序
阅读全文
摘要:CF1742G 考虑拆位,先把高位的填成 1 ,后面再考虑填上低位的。 把每一位能填的数存进数组里。 从高位往低位填,每一位填时,尽量把低位也顺便填上。 code #include<bits/stdc++.h> using namespace std; const int N=2e5+10,logm
阅读全文
摘要:B 有一个长度为 $n$ 的排列,你可以进行若干操作,每次操作选择相邻的两个数并删去较大的数。 问最后可以生成多少不同的序列。 设 $f_i$ 为以 $i$ 为结尾的序列数。 $f_i=\sum f_j$ , 仅当区间 $[i,j]$ 内所有数都大于 $\min(a_i,a_j)$ 时。 设向前第一
阅读全文
摘要:C 中位数定义为第 $\lfloor \dfrac{n}{2} \rfloor+1$ 个数。 现有一个数组 $a$ , $n\le10^5$. 对于 $1\le l \le r \le n$,求区间 $[l,r]$ 的中位数, 把这些中位数构成一个大小为 $\dfrac{1}{2}n(n+1)$ 的
阅读全文
摘要:C 有一棵树,每次操作将一个点染成黑色,每次询问查询一个点最近的黑点有多远。 有两种暴力: 对于一个被修改为黑色的点,$BFS$ 给所有点更新。 对于一个所求点,和所有黑色点求 $LCA$ 求最小值。 根号分治。对操作序列分块。 对于本块之前的的黑点,把所有修改多源 $BFS$, 复杂度 $O(n)
阅读全文
摘要:A 初始时只有 $a_k=1$,有 $m$ 次操作,每次交换 $a_u,a_v$ 的值,问忽略多少次操作可以使最终 $a_i=1$. 简单DP即可。 code #include<algorithm> #include<cstdio> #include<cstring> #include<iostre
阅读全文
摘要:B $A$ $B$ 轮流行动,$A$ 需要拿走若干个数(不可不拿),$B$ 可以拿走一个数。 $A$ 拿走的数和要最大, $B$ 则希望 $A$ 拿走的数和最小。 问 $A$ 能拿走多少数的和。 显然,$A$ 先会拿走所有的正数,再拿 $0,1$ 个最大的负数。如果没有正数,$A$ 也可能拿 $2$
阅读全文
摘要:A 问 $n$ 个数 ($\le 10^5$),挑任意数,问有没有多种方法使和相等。 若没有和相等,我们构造极限数列为 $1,2,4,8...$,每个都不同。 然而因为 $a_i\le 10^5$ ,这样数列长度最多为 $20$. 所以 $n>20$,答案为有。剩下部分暴力。 B $A$ 和 $B$
阅读全文
摘要:A 求字符串插入多少字符后可以变为回文串。 将字符串翻转后与原字符串求最长公共子串。 $ans=\min(i+j-2*f_{i,j}).(i+j=n-(n\mod 2))$ code #include<algorithm> #include<cstdio> #include<cstring> #in
阅读全文
摘要:A 求最小 $n$ 使得 $n^2$ 为 $k$ 的倍数且 $n$ 不为 $k$ 的倍数。 令 $k=p_1^{q1}p_2^{q2}...$. 则使 $n= p_1^{\left\lceil\dfrac{q1}{2}\right\rceil} p_2^{\left\lceil\dfrac{q2}{
阅读全文
摘要:CF1720D1 由于该题涉及到了子序列,我们先一眼看出这一题是一道动态规划。 根据以往的经验,于是我们先列出状态 $f_i$ 表示以 $i$ 结尾的 $b$ 序列最长长度。 $O(n^2)$ 暴力方程为: $f_i=\max_{0\le j <i}(f_j+1),(a_j⊕i<a_i⊕j)$. 瓶
阅读全文