摘要: 排列的环分解 单次交换操作的效果: 当交换元素属于不同环时 \(\to\) 合并两个环 当交换元素属于同一个环时 \(\to\) 将该环分裂为两个 由于所有环的长度之和为 \(N\),且每个环长度均为正整数,因此不同的环长度数量最多只有 \(O(\sqrt{N})\) 种 位运算 定义 LSB(w) 阅读全文
posted @ 2025-09-03 16:26 V_Melville 阅读(11) 评论(0) 推荐(0)

摘要: 1. 在两个数列之间 有两个整数数列 \(a_1,a_2,\cdots,a_n\) 和 \(b_1,b_2,\cdots,b_n\)。我们的任务是找出满足以下条件的数列 \(c_1,c_2,\cdots,c_n\): 对 \(i=1,2,\cdots,n\),\(a_i \le c_i \le b_ 阅读全文
posted @ 2024-06-19 17:15 V_Melville 阅读(21) 评论(0) 推荐(1)

摘要: AGC020C. Median Sum 记原序列的总和为 \(S\) 容易发现如果把空集也考虑进去的话,在左边任取一个子集,其和为 \(x\),那么一定可以在右边找到一个子集满足它的和为 \(S - x\)。也就是说,位于权值为 \(\frac{S}{2}\) 的左右两边的子集是对称的。 于是,我们 阅读全文
posted @ 2024-06-07 21:43 V_Melville 阅读(34) 评论(0) 推荐(0)

2025年11月2日

摘要: C. Truck Driver 二分或双指针 固定区间左端点 \(l\),找到区间中至少有 \(A\) 个 a 的最小右端点 \(r_a\),以及区间中至少有 \(B\) 个 \(b\) 的最小右端点 \(r_b\)。显然条件二更紧,所以用 \(r_b-r_a\) 来更新答案即可。 注意,\(r_b 阅读全文
posted @ 2025-11-02 16:38 V_Melville 阅读(6) 评论(0) 推荐(0)

2025年10月26日

摘要: C. Odd One Subsequence 开个桶来统计每种数的个数,答案就是 \(\sum \binom{cnt[x]}{2} \times (n-cnt[x])\) 代码实现 #include <bits/stdc++.h> #define rep(i, n) for (int i = 0; 阅读全文
posted @ 2025-10-26 15:49 V_Melville 阅读(43) 评论(0) 推荐(1)

2025年10月22日

摘要: C. Brackets Stack Query 合法括号序列需满足以下两个条件: 左右括号数相等 任意前缀中左括号数至少是右括号数 一般,我们遇到左括号,记为 +1,遇到右括号,记为 -1,然后维护前缀和。 那么,第一个条件就是 \(S_n = 0\),第二个条件就是 \(\min(S_i) = 0 阅读全文
posted @ 2025-10-22 01:20 V_Melville 阅读(16) 评论(0) 推荐(0)

2025年10月16日

摘要: 传送门 T4. 搬砖 给定 \(n\) 个非负整数 \(a_i\),每次可以花费 \(1\) 的代价使得一个数字加 \(1\) 或者减 \(1\)(不能被减到负数),问最少需要多少代价使得所有数字的异或值为 \(0\) 。 要求多测 限制: 对于 \(5\%\) 的数据:\(n=2, a_i \le 阅读全文
posted @ 2025-10-16 17:08 V_Melville 阅读(6) 评论(0) 推荐(0)

2025年10月12日

摘要: C. Bipartize 枚举每个点的颜色,然后统计有多少条边的端点颜色相同,这就是要删除的点,取最小值即可 代码实现 #include <bits/stdc++.h> #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace s 阅读全文
posted @ 2025-10-12 14:43 V_Melville 阅读(119) 评论(0) 推荐(0)

2025年10月5日

摘要: C. Upgrade Required 开一个桶来维护每种版本的电脑数量,一开始每个桶中的电脑数都是 \(1\) 用变量 \(r\) 来维护“第一个可能非空的版本号”,并且 \(r\) 只会单调递增。每次操作把 \(r\) 指向的连续若干个桶(直到 \(x\))合并到 \(y\),并把这些桶清空。 阅读全文
posted @ 2025-10-05 13:26 V_Melville 阅读(66) 评论(0) 推荐(0)

2025年10月4日

摘要: T1. 整除 创建一个由数对组成的数组 \(C\),其中每个元素为 \((i, a_i) \ (1 \leqslant i \leqslant n)\)。令 \(C_{x, 1}\) 和 \(C_{x_, 2}\) 分别表示数对 \(C_x\) 的第一个(即 \(i\))和第二个元素(即 \(a_i 阅读全文
posted @ 2025-10-04 18:46 V_Melville 阅读(15) 评论(0) 推荐(0)

2025年9月29日

摘要: T1. 数学作业 发现 \(a-b\) 太大会很快超过题目所限的范围,所以 \(a-b\) 值并不大。 然后枚举差值 \(d\),发现 \(\frac{(x+d)!}{x!}\) 关于 \(x\) 单调递增。所以可以二分判断存不存在 \(x\) 满足 \(\frac{(x+d)!}{x!} = n\ 阅读全文
posted @ 2025-09-29 17:32 V_Melville 阅读(10) 评论(0) 推荐(0)

2025年9月28日

摘要: C. Rotate and Sum Query 如果没有第一种查询,只要直接做前缀和就行。 即使有第一种查询,也不必真的去移动元素,只要把下标整体偏移一下,记住“原序列中每个元素现在排在第几位”,就能知道想要的区间和在原序列的哪一段! 代码实现 #include <bits/stdc++.h> #d 阅读全文
posted @ 2025-09-28 02:57 V_Melville 阅读(92) 评论(0) 推荐(0)

2025年9月21日

摘要: C. New Skill Acquired 多源bfs 代码实现 #include <bits/stdc++.h> #define rep(i, n) for (int i = 0; i < (n); ++i) using namespace std; int main() { int n; cin 阅读全文
posted @ 2025-09-21 05:54 V_Melville 阅读(187) 评论(0) 推荐(1)