摘要: 思路 容易看出来是个 DP 题,但是你发现 DP 的起点是不好确定的,于是假定第一条边的起点是黑色。然后你发现设为白色的贡献与黑色是相同的,于是直接令第一条边的起点是黑色,最后答案乘以 \(2\) 即可。 然后就可以愉快的 DP 了。 首先枚举每条边白色点的数量 \(k\),定义 \(dp_{i,0 阅读全文
posted @ 2024-06-22 10:58 WBIKPS 阅读(62) 评论(0) 推荐(0)
摘要: 思路 因为 \(1 \leq n,q \leq 2 \times 10^5\),所以对于每一次查询的时间复杂度一定要达到 \(\Theta(\log n)\),甚至于 \(\Theta(1)\)。 一个最简单的想法,我们先统计出整个序列 \(a\) 的和 \(sum\),然后答案是 \(|sum - 阅读全文
posted @ 2024-06-22 10:58 WBIKPS 阅读(72) 评论(0) 推荐(0)
摘要: 思路 令 \(f_i\) 表示 \(i\) 最大的完全平方数因子。 那么,现在如果有两个数 \(i,j\),要使 \(i \times j\) 为完全平方数,一定要使 \(\frac{i}{f_i} = \frac{j}{f_j}\)。 换句话说,\(i \times j\) 为完全平方数,当且仅当 阅读全文
posted @ 2024-06-22 10:58 WBIKPS 阅读(26) 评论(0) 推荐(0)
摘要: 思路 首先,不难看出一个规律,就是对于一个序列 \(a\),如果它将操作所有以 \(x\) 为第一关键字的二元组,那么序列的 \(a_{x \sim n}\) 将循环右移一位。(注意,在这里的 \(x\) 指的是在 \(1 \sim (n - 1)\) 中的任意一个定值) 那么,我们就可以将编号分别 阅读全文
posted @ 2024-06-22 10:58 WBIKPS 阅读(32) 评论(0) 推荐(0)
摘要: 思路 对于这种题目,通常会想到用哈希维护。 由于集合相同与 \(a_{1 \sim x}\),\(b_{1 \sim y}\) 的顺序无关,所以对于我们的哈希函数 \(h(x)\) 必定需要用一种有交换律的符号。 首先想到的当然是加法,但是不太好实现,因为这些数太大了,不因会爆 unsigned l 阅读全文
posted @ 2024-06-22 10:57 WBIKPS 阅读(36) 评论(0) 推荐(0)
摘要: 思路 对于这道题,我们可以发现一个事情:我们筛质数只需要筛 \(1 \sim \log_3 n\) 的部分就行了。 因为 \(k = p \times q^3\),那么,我们考虑一种极端情况,\(p\) 为一个很小的数,那么 \(k\) 就无限接近于 \(q^3\)。 我们就先假设 \(k = q^ 阅读全文
posted @ 2024-06-22 10:57 WBIKPS 阅读(35) 评论(0) 推荐(0)
摘要: 思路 反悔贪心套路题。 发现一个性质,当一个操作 1 生效意味着在这一步之前的所有操作都没用。 那么考虑倒着枚举,对于每一个操作 1 的选取状态做一个简单的分讨: 如果保留,那么这种情况下的答案就是之前的 \(sum\) 加上当前的 \(y\)。 如果不保留,继续往前走,\(k \leftarrow 阅读全文
posted @ 2024-06-22 10:57 WBIKPS 阅读(36) 评论(0) 推荐(0)
摘要: 思路 定义 \(dp_{i,j}\) 表示在前 \(i\) 位原字符串,压缩为 \(j\) 位的方案数。 不难得出状态转移方程: \[ dp_{i,j} = \sum_{k = 1}^{i}(25 \times dp_{k,j - \lfloor \log_{10}k \rfloor - 1}) \ 阅读全文
posted @ 2024-06-22 10:57 WBIKPS 阅读(44) 评论(0) 推荐(0)
摘要: 思路 首先,我们得清楚如何判断三点共线。 对于每一个点,它的横纵坐标都有这么一个关系:\(n \times x + m = y\)(其中 \(n,m\) 为常数)。 那么,对于三点共线的点来说,\(n,m\) 是相同的。因此我们得出三个式子。 \[ n \times x_a + m = y_a \] 阅读全文
posted @ 2024-06-22 10:56 WBIKPS 阅读(37) 评论(0) 推荐(0)
摘要: 思路 其实很简单,我们可以将所有数值相同的值的下标存入一个 vector 里面。因为,我们既然要查找 \(X\),不妨把所有值为 \(X\) 的下标存在一起,方便查找。(可以在输入的时候完成) 我们不妨在每一个数值后面添加一个哨兵,然后二分查找第一个大于等于 \(l\) 的数和第一个大于等于 \(r 阅读全文
posted @ 2024-06-22 10:56 WBIKPS 阅读(44) 评论(0) 推荐(0)
摘要: 思路 对于包含数 \(x\) 的卡牌,两张之中必定要选择一张,由此想到 2-SAT 的思想。 我们将所有带有 \(x\) 的卡牌两两连边,每一条边连接的点都表示两点必须选择一个。 不难发现,我们这样会得出若干个环。(因为对于每一张卡牌的出边为 \(2\),一定会形成环) 在每一个环中的选择情况,不会 阅读全文
posted @ 2024-06-22 10:56 WBIKPS 阅读(31) 评论(0) 推荐(0)
摘要: 思路 题目要求的是 \(\max_{a = 1}^{n}\{\sum_{i = 1}^{a}\sum_{j = 1}^{a}{A_j}\}\),所以我们将 \(\sum_{i = 1}^{a}\sum_{j = 1}^{a}{A_j}\) 化简一下,得: \[ i \times A_1 + (i - 阅读全文
posted @ 2024-06-22 10:55 WBIKPS 阅读(27) 评论(0) 推荐(0)
摘要: 思路 首先对于这种题目多半是要先以 \(a_i\) 排序的,这样我们可以消除 \(a_i\) 的限制,只需要考虑 \(b_i\) 的限制即可。 定义 \(dp_{i,j}\) 表示在前 \(i\) 个人中选 \(j\) 个人的合法方案数。但是这样不知道前面选取人的 \(b_i\) 的大小。 因此,重 阅读全文
posted @ 2024-06-22 10:55 WBIKPS 阅读(22) 评论(0) 推荐(0)
摘要: 思路 将小于等于 \(x\) 的元素赋为 \(1\),其余的赋为 \(0\)。那么一个区间内小于等于 \(x\) 的数量就是区间中 \(1\) 的数量。 那么,将区间升序排列就是将 \(1\) 先堆在前面,将 \(0\) 堆到后面;降序排列同理。 考虑动态维护 \(x\) 的位置,记其位置为 \(t 阅读全文
posted @ 2024-06-22 10:55 WBIKPS 阅读(24) 评论(0) 推荐(0)
摘要: 思路 首先对所有的 \(c\) 从小到大排序,然后对于每一个值如果之前能凑出就不选,否则就选。 这样做显然是对的。令 \(p_1,p_2,\dots,p_{2^n-1}\) 表示将 \(c\) 排序之后,对应原来的下标;\(S\) 表示选出数的集合;\(S'\) 表示最终选出数的集合。可以证明两个问 阅读全文
posted @ 2024-06-22 10:55 WBIKPS 阅读(21) 评论(0) 推荐(0)