随笔分类 -  题解

平时做过的题的题解
摘要:Codeforces Round 1049 (Div. 2) E2 解题思路 说白了题目就是让我们求 \[\sum_{i = 1}^{m}i \times cnt_i \]其中 \(cnt_i\) 的含义是,最后结果为 \(i\) 的初始局面的数量。 要是能以合理的时空复杂度求出 \(cnt_i\) 阅读全文
posted @ 2025-09-11 12:09 Young_Cloud 阅读(12) 评论(0) 推荐(0)
摘要:01 DP 入门题 03 线性基 线段树 解题思路 解决这题就必须要学下异或线性基。 对于子树的询问,我们可以转化成在 DFS 序中的区间询问:区间的左端点就是子树的根在 DFS 序中的位置,区间长度就是子树的大小。于是我们要做的就是实现单点修改和区间查询(查询区间的异或线性基)。 直接线段树就好了 阅读全文
posted @ 2025-04-11 20:56 Young_Cloud 阅读(15) 评论(0) 推荐(0)
摘要:1001 模拟 就注意理解一下题意,题中 \(k\) 的含义是当一个敌人收到了 \(k\) 次伤害后,如果没死,就进入了不可选中的状态。其他的就没啥了直接看码。 CODE struct ENEMY { int hp, u, idx, cnt; bool operator< (const ENEMY 阅读全文
posted @ 2025-04-01 23:16 Young_Cloud 阅读(39) 评论(0) 推荐(0)
摘要:AE 签到秒了 DL So Hard 做不了一点 I 模拟还是算了 B dp 的优化 没有解题思路, 陈的观察加刘的码力直接一发过了 CODE #include<bits/stdc++.h> using namespace std; #define int long long const int m 阅读全文
posted @ 2025-03-28 15:54 Young_Cloud 阅读(47) 评论(0) 推荐(0)
摘要:1001 数学 Lucas定理 解题思路 一看题就知道我们要求当 \(b_i \in [1, L_i]\) 内,有多少 \(b_i\) 使得 \((^{a_i}_{b_i})\) 是奇数。 于是我们看 \(Lucas\) 定理: 对于素数 \(p\),有: \[(^n_k) \equiv (^{\l 阅读全文
posted @ 2025-03-22 21:19 Young_Cloud 阅读(12) 评论(0) 推荐(0)
摘要:Midum 1006 博弈 找规律 解题思路 我的思路是从最一般的开始考虑 (一般性:红宝石 > 蓝宝石 > 盒子) 若只有红宝石,则是一个经典的巴什博弈,当 \(r \% 4 = 0\) 时后手获胜(题目保证了三个数不都为 0)。 若只有若干红宝石和 1 个蓝宝石。注意到拿走蓝宝石的附加作用是增或 阅读全文
posted @ 2025-03-15 23:23 Young_Cloud 阅读(11) 评论(0) 推荐(0)
摘要:洛谷 P5490 【模板】扫描线 & 矩形面积并 这里主要讲用代码实现的一些细节。也就是如何写线段树。 离散化后,我想要线段树维护的区间端点都是正数,因此在离散化之前我们在待离散化的数组里插入一个最小值,以遍在排序后将 0 这个位置占着: a.clear(); a.push_back(-1); // 阅读全文
posted @ 2025-03-14 17:46 Young_Cloud 阅读(23) 评论(0) 推荐(0)
摘要:好难啊好难啊 Log 3.15 增加 1008 的题解 1001 略 1002 概率 数学 解题思路 为了方便判断那两个人进行 duel,我们将所有人的编号都减一,即编号的范围是 \([0, N)\)。 根据题意我们知道相邻的两个人(编号为 \(2k\) 和 \(2k + 1\)) duel 后,胜 阅读全文
posted @ 2025-03-10 23:07 Young_Cloud 阅读(30) 评论(0) 推荐(0)
摘要:B 动态规划 解题思路 一眼 dp,主要就是怎么去转移。 我们定义 \(dp[u][0/1]\) 为在整个 dfs 序中节点 \(u\) 在偶数位/奇数位时,子树 \(u\) 的最大价值。 为了简便描述,我们将 “\(u\) 在偶数位” 记作 “从 0 进入 \(u\)”,将 “\(u\) 在奇数数 阅读全文
posted @ 2025-03-10 21:52 Young_Cloud 阅读(222) 评论(0) 推荐(1)
摘要:A 其实是构造。 构造出 123456789d000……。 后面 0 的个数跟给定 n 的位数相同。 然后加上 n 减模数就好了 CODE void solve() { int n,d; cin>>n>>d; i64 cur=1234567890ll+d; int nn=n; while(nn){ 阅读全文
posted @ 2025-03-06 20:53 Young_Cloud 阅读(267) 评论(0) 推荐(0)
摘要:ABC 略 D 首先将 \(N\) 个不同的数分成若干非空组的方案数是贝尔数 \(B(N)\),且 \(B(12) < 5 \times 10^6\),所以我们可以暴力求出所有的组合方案来求解。 CODE std::unordered_set<i64> vis; i64 val; void dfs( 阅读全文
posted @ 2025-03-05 23:29 Young_Cloud 阅读(60) 评论(0) 推荐(0)
摘要:ABC 略 D 解题思路 如果对于每个点,我们知道了它被移除的时刻(无限大则说明不会被移除),我们就可以知道询问的点在给定时刻有没有消失。 在对所有的点按横坐标分类后,我们就可以知道最多有多少行点被移除:点数最少的那一列的点数。 对于能够被移除的点,假设它处在 \(x\) 层,则被该点被移除的时刻就 阅读全文
posted @ 2025-03-03 22:10 Young_Cloud 阅读(18) 评论(0) 推荐(0)
摘要:ABC 略 D 解题思路 对于操作 2,我们可以将窝对换而企鹅不动。然后就是看实现了 CODE void solve() { int n = 0, q = 0; std::cin >> n >> q; // idx 第 i 个位置的窝的编号 // nest 编号为 i 的窝在那个位置 // p 第 阅读全文
posted @ 2025-03-03 17:09 Young_Cloud 阅读(19) 评论(0) 推荐(0)
摘要:AB 略 C 解题思路 注意题目所描述的 penalty 是取最大值而不是求和。于是我们就可以用二分了,对于每个 mid,我们 check 的时候就贪心地来涂色:我们总是从蓝色开始涂,在红色处截止; 下面仅给出 check: CODE bool check(int mid) { int cnt = 阅读全文
posted @ 2025-03-02 17:30 Young_Cloud 阅读(27) 评论(0) 推荐(0)
摘要:ABCD 略 E 题目大意 给定一张图,对于图上的每两个点问这两点之间存不存在回文路径, 存在的话长度最短是多少 解题思路 (感觉难度 E > F) 首先在空路径的两端不断添加相同的路径,我们可以从短到长地找到所有长度为偶数的回文路径;而在长度为 1 的路径两端不断添加相同的路径,我们可以从短到长地 阅读全文
posted @ 2025-02-27 20:26 Young_Cloud 阅读(37) 评论(0) 推荐(0)
摘要:log 25-2-26 新增了 G 题的题解 ABC 略(C其实就是阅读理解) D 题目大意 在 \(n\) 个骰子中指定两个骰子,问这两个骰子骰到同一个数的概率最大是多少 解题思路 直接暴力就好了:枚举每一个数,对每个数枚举每一对骰子。 CODE void solve() { int n = 0; 阅读全文
posted @ 2025-02-17 20:32 Young_Cloud 阅读(26) 评论(0) 推荐(0)
摘要:ABC 略 D 题目大意 01串中有若干 1,求至少通过交换多少次相邻的数,能使得所有的 1 是连续的。 解题思路 我用的中位数定理,让全部的 1 往最中间的 1 靠,然后硬算交换了多少次。 但感觉 std 更加巧妙简单,以下是我对 std 的理解: 目标是通过交换让所有的 1 都连续,也就是 1 阅读全文
posted @ 2025-02-16 22:20 Young_Cloud 阅读(30) 评论(0) 推荐(0)
摘要:A 栈秒了 CODE void solve() { int n = 0; std::cin >> n; std::stack<int> a; for (int i = 0; i < n; i++) { int x = 0; std::cin >> x; if (a.empty() || a.top( 阅读全文
posted @ 2025-02-14 19:30 Young_Cloud 阅读(18) 评论(0) 推荐(0)
摘要:A 略 B 贴个代码就完了 CODE 点击查看代码 void solve() { int n = 0, t = 0, k = 0; std::cin >> n >> t >> k; int ans = (n - k) / t; if (ans - 1 >= k) { ans = k + 1; } s 阅读全文
posted @ 2025-02-14 19:25 Young_Cloud 阅读(14) 评论(0) 推荐(0)
摘要:A 题目大意 有一个大小为 \(n\) 的数组 \(A\),\(A_i \in [l_i, r_i]\),定义 \(f(A) = \sum_{i = 1}^{n - 1}|A_i - A_{i + 1}|\)。求 \(f(A)\) 的期望。 解题思路 很明显这题主要就是要我们求相邻两个数之间差的绝对 阅读全文
posted @ 2025-02-11 11:32 Young_Cloud 阅读(38) 评论(0) 推荐(0)