05 2022 档案

摘要:D - String Deletion 贪心、链表 要想操作次数最大,设当前已经删到了第 i 个字符,那第一步操作就要找到 i 后面第一个有连续0/1的串,删掉其中一个 找到 i 后面第一个有连续0/1的串:将这些可以被删去的位置记录到 set 里,二分找到 i 后面第一个,找到了就删去 删去元素后 阅读全文
posted @ 2022-05-31 16:20 hzy0227 阅读(21) 评论(0) 推荐(0) 编辑
摘要:D - Radio Towers DP 一个塔可以覆盖以自身为中心的 1,3,5,..., 个塔 所以可以设 f[n] 为把 n 拆成奇数和的方案数,答案为 f[n]2n f[n]=f[n1]+f[n3]+f[n5]+...+f[0/1], \(f 阅读全文
posted @ 2022-05-28 21:44 hzy0227 阅读(22) 评论(0) 推荐(0) 编辑
摘要:D - Sequence and Swaps 枚举 由于最后一定是排好序的,且数据范围很小,所以可以枚举最终的序列是什么,即枚举最后的 x 是哪个数,剩下的数组成了最终的序列 求每种情况的操作次数即可 #include <iostream> #include <cstring> #include < 阅读全文
posted @ 2022-05-28 21:39 hzy0227 阅读(28) 评论(0) 推荐(0) 编辑
摘要:D - Pairs 贪心 猜想可行的情况是连续的,所以只需要求出 b[i] 在某一对中是小的,的个数,的最小情况和最大情况即可 若求最大情况,从 1~2*n 枚举,设当前是第 i 个数 i 已经被之前的数匹配过了,continue i 在 b 集合里,想让 答案 尽量 阅读全文
posted @ 2022-05-28 21:37 hzy0227 阅读(28) 评论(0) 推荐(0) 编辑
摘要:C - Busy Robot 模拟 nx : 当前发送当前这次命令时机器人的位置 ed:当前正在执行的操作的结束时间 d:当前的方向 #include <iostream> #include <cstring> #include <algorithm> #include <vector> #incl 阅读全文
posted @ 2022-05-28 21:28 hzy0227 阅读(29) 评论(0) 推荐(0) 编辑
摘要:D - Ceil Divisions 构造 方法1 可考虑先把除了 1,2,k 的所有数跟 n 搞一下,这个一定是花 n - 4 次让除了 k,n 都满足条件 现在就让 n,k 变成 1 一直让 n 跟 k 搞,需要 logkn次 一直让 k 跟 2 搞,需要 \(\ 阅读全文
posted @ 2022-05-28 21:25 hzy0227 阅读(24) 评论(0) 推荐(0) 编辑
摘要:C - Building a Fence DP 维护每一段的最下方能落在哪一段格子上,由此判断下一段是否可以 #include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <cmath> 阅读全文
posted @ 2022-05-28 21:13 hzy0227 阅读(18) 评论(0) 推荐(0) 编辑
摘要:D - Program st表 / 线段树 若查询去掉 [l,r] 操作后,整个操作过程中出现的值有哪些,由于每次操作值都是 +1 或 -1,因此是连续的,只要求出整个操作过程中出现的最大值和最小值即可 求出前缀和, 因为 l 可能为 1,r 可能为 n,所以令 \(s[0]=0,\;s[n 阅读全文
posted @ 2022-05-28 21:07 hzy0227 阅读(18) 评论(0) 推荐(0) 编辑
摘要:树上染色 树上背包 + 边贡献 HAOI2015] 树上染色 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include <iostream> #include <cstring> #include <algorithm> #include <vector> #include 阅读全文
posted @ 2022-05-28 20:54 hzy0227 阅读(21) 评论(0) 推荐(0) 编辑
摘要:Coins 多重背包可行性 SCUACM2022集训前训练-动态规划 - Virtual Judge (vjudge.net) 本题若用二进制拆解多重背包会T,可用单调队列优化 但由于本题是求可行性而非最优化,可用进行剪枝来减小复杂度 f[i]i 能否被表示出来 \(used[i 阅读全文
posted @ 2022-05-28 20:51 hzy0227 阅读(244) 评论(0) 推荐(0) 编辑
摘要:理想的正方形 二维倍增 SCUACM2022集训前训练-动态规划 - Virtual Judge (vjudge.net) 设 maxn[i][j][k] 为以 (i,j) 为左上角,边长为 2k 的正方形内元素的最大值 #include <iostream> #inclu 阅读全文
posted @ 2022-05-28 20:45 hzy0227 阅读(38) 评论(0) 推荐(0) 编辑
摘要:OSU! 期望dp SCUACM2022集训前训练-动态规划 - Virtual Judge (vjudge.net) 若连续 x 次成功的贡献是 x,则第 i 次对答案的贡献为 1p 但连续 x 次成功的贡献是 x3, 而期望只有线性性质,对于 x3 不可累加 阅读全文
posted @ 2022-05-28 20:42 hzy0227 阅读(45) 评论(0) 推荐(1) 编辑
摘要:Tele Broadcast 树上背包 SCUACM2022集训前训练-动态规划 - Virtual Judge (vjudge.net) 注意处理叶子结点 #include <iostream> #include <cstring> #include <algorithm> #include <v 阅读全文
posted @ 2022-05-28 20:35 hzy0227 阅读(24) 评论(0) 推荐(0) 编辑
摘要:Centroids 换根dp SCUACM2022集训前训练-动态规划 - Virtual Judge (vjudge.net) 重心只有 1 个 或 2 个 待补 #include <iostream> #include <cstring> #include <algorithm> #includ 阅读全文
posted @ 2022-05-28 20:33 hzy0227 阅读(46) 评论(0) 推荐(0) 编辑
摘要:游走 高斯消元 + 期望dp HNOI2013]游走 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 设从第 i 个点出来的期望次数为 f[i] f[u]=f[v]deg[v]1<u<n \(f[1]=\sum \fra 阅读全文
posted @ 2022-05-28 20:31 hzy0227 阅读(50) 评论(0) 推荐(0) 编辑
摘要:高斯消元 #include <iostream> #include <cstring> #include <algorithm> #include <cmath> #include <iomanip> using namespace std; typedef long long ll; const 阅读全文
posted @ 2022-05-26 19:12 hzy0227 阅读(22) 评论(0) 推荐(0) 编辑
摘要:st表 #include <iostream> #include <cstring> #include <cmath> using namespace std; const int N = 2e5 + 10, M = 18; int f[N][M], a[N]; int n, m; void ini 阅读全文
posted @ 2022-05-26 15:18 hzy0227 阅读(26) 评论(0) 推荐(0) 编辑
摘要:Arbitrage 判正环 套利问题,给出若干对货币兑换的汇率,求能否通过汇率兑换使钱越来越多 floyd求最长路,如果某一点到自身的最长路大于 1, 则可以 tarjan 判正环 #include <iostream> #include <cstring> #include <algorithm> 阅读全文
posted @ 2022-05-26 11:17 hzy0227 阅读(60) 评论(0) 推荐(0) 编辑
摘要:D - Journey dp 状态设计 f[p][t][x] 为从 p 店出发,向 x 方向走,当前是第 t 天,还能走多少个城市(包括 p) 其中 x 为 0 表示向左,1 表示向右 t 为 0 表示边的方向是初始方向,t 为 1 表示边的方向是初始方向相反 #include <iostr 阅读全文
posted @ 2022-05-25 22:05 hzy0227 阅读(26) 评论(0) 推荐(0) 编辑
摘要:C - Longest Simple Cycle dp 设 f[i] 为以第 i 个线段为环的右边界,环的最大长度 不妨令 l=min(a[i],b[i]),r=max(a[i],b[i]) lri1 条线段的 [l,r] 这部 阅读全文
posted @ 2022-05-25 22:01 hzy0227 阅读(16) 评论(0) 推荐(0) 编辑
摘要:仓鼠找 sugar LCA SCUACM2022集训前训练-图论 - Virtual Judge (vjudge.net) 首先要观察出一个结论:若 a - b 的路径与 c - d 的路径相交,设 a, b 的 LCA 为 x; c, d 的 LCA 为 y 则有 x 在 c - d 路径上 或 阅读全文
posted @ 2022-05-25 21:52 hzy0227 阅读(9) 评论(0) 推荐(0) 编辑
摘要:Cow Contest floyd求传递闭包 SCUACM2022集训前训练-图论 - Virtual Judge (vjudge.net) 若 a 大于 b,则连一条 a - > b 的边,一个点能走到的点就是比它小的点 跑一遍 floyd,就可知道任意两个点的大小关系 枚举 i, j,如果 i 阅读全文
posted @ 2022-05-25 21:47 hzy0227 阅读(26) 评论(0) 推荐(0) 编辑
摘要:Wormholes spfa 判负环 SCUACM2022集训前训练-图论 - Virtual Judge (vjudge.net) #include <iostream> #include <cstring> #include <algorithm> #include <vector> #incl 阅读全文
posted @ 2022-05-25 21:44 hzy0227 阅读(27) 评论(0) 推荐(0) 编辑
摘要:LCA 倍增 #include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <queue> using namespace std; typedef long long ll; const 阅读全文
posted @ 2022-05-25 20:10 hzy0227 阅读(179) 评论(0) 推荐(0) 编辑
摘要:灾后重建 P1119 灾后重建 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) floyd 本题考查 floyd 算法的本质: for (int k = 1; k <= n; k++) for (int i = 1; i <= n; i++) for (int j = 1; j < 阅读全文
posted @ 2022-05-25 13:20 hzy0227 阅读(72) 评论(0) 推荐(0) 编辑
摘要:P3870 [TJOI2009] 开关 TJOI2009] 开关 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 线段树 维护区间和,区间异或 区间异或可视为 区间和 = 区间长度 - 区间和 #include <iostream> #include <cstring> #incl 阅读全文
posted @ 2022-05-25 11:39 hzy0227 阅读(37) 评论(0) 推荐(0) 编辑
摘要:Buy Tickets 线段树 / 树状数组上二分 + 逆向思维 SCUACM2022集训前训练-数据结构 - Virtual Judge (vjudge.net) 、 题意 一开始每个位置都没有人,每次给出一个 posval, 把 val 查到第 pos + 1 的位置,求最 阅读全文
posted @ 2022-05-24 21:58 hzy0227 阅读(33) 评论(0) 推荐(0) 编辑
摘要:Apple Tree SCUACM2022集训前训练-数据结构 - Virtual Judge (vjudge.net) dfs序 + 树状数组 注意以后存边时写,效率较高 vector<vector<int> > G(N); #include <iostream> #include <cstrin 阅读全文
posted @ 2022-05-24 20:43 hzy0227 阅读(80) 评论(0) 推荐(0) 编辑
摘要:线段树 区间加 ,区间和,区间最值,区间推平 #include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <cmath> #include <cstdio> using namespac 阅读全文
posted @ 2022-05-24 20:02 hzy0227 阅读(23) 评论(0) 推荐(0) 编辑
摘要:D - Playlist 思维 st[i] : 第 i 个数是否被删去了 ne[i] : 第 i 个数的下一个数是哪个 del:当前的可能被删掉的数的集合 降复杂度的关键:只有在newdel里的才可能被删去,因为别的数对已经在上一轮被判过了 复杂度为 O(nlogn) #include <i 阅读全文
posted @ 2022-05-23 21:14 hzy0227 阅读(16) 评论(0) 推荐(0) 编辑
摘要:C - Alice and the Cake 队列/优先队列 记录每个重量的蛋糕个数 求出蛋糕的重量之和,看这个重量能否切出这些蛋糕 把总和放入队列,如果当前这个重量还有蛋糕,那就不切这个,如果没有就继续切 但是这样广搜,很多重量其实是切不出来的,但要一直切到 1 才能判断出来,所以效率很低 因为最 阅读全文
posted @ 2022-05-23 20:43 hzy0227 阅读(20) 评论(0) 推荐(0) 编辑
摘要:Ananagrams SCUACM2022集训前训练-数据结构 - Virtual Judge (vjudge.net) 字符串比较 若比较两个字符串能否经过重新排列构成(不区分大小写),不必统计每个字符出现的次数看是否相等,可以将字符全部变成小写再 sort 一下,看两个字符串是否相等 #incl 阅读全文
posted @ 2022-05-23 20:01 hzy0227 阅读(29) 评论(0) 推荐(0) 编辑
摘要:Andy's First Dictionary SCUACM2022集训前训练-数据结构 - Virtual Judge (vjudge.net) stringstream 把单词从字符串里分离出来,可以先把字符串里的非字母字符变成 空格, 再放入 stringstream 中,再读 strings 阅读全文
posted @ 2022-05-23 19:37 hzy0227 阅读(27) 评论(0) 推荐(0) 编辑
摘要:POJ 2566 - Bound Found SCUACM2022集训前训练-数据结构 - Virtual Judge (vjudge.net) 双指针 + 前缀和 本题似乎没有单调性,难以使用双指针,但可先求出前缀和并记录下标,然后对前缀和排序 因为是 |s[r]s[l]| 取了绝对值, 阅读全文
posted @ 2022-05-23 19:11 hzy0227 阅读(18) 评论(0) 推荐(0) 编辑
摘要:Jessica's Reading Problem SCUACM2022集训前训练-数据结构 - Virtual Judge (vjudge.net) 双指针 假设当前枚举的区间是 [l,r], 且是以 r 为右端点的最大的可以满足条件的 l, 那么 r++ 时这个 阅读全文
posted @ 2022-05-23 17:01 hzy0227 阅读(17) 评论(0) 推荐(0) 编辑
摘要:E - White Pawn DP 设 st[y] 表示 (2n,y) 是否能到达 初始化 st[n]=true(x,y) 是白子,则 st[y] 的值为 y 这一列的上一个黑子的值 若 (x,y) 是黑子,则 \(st[y]=st[y 阅读全文
posted @ 2022-05-23 14:20 hzy0227 阅读(47) 评论(0) 推荐(0) 编辑
摘要:D - Pond 二分 + 前缀和 求一个子矩阵中元素的中位数,可二分中位数,check 过程中将矩阵变为 01 矩阵,若小于 mid 则为 1,用二维前缀和求出有多少元素小于 mid 复杂度 O(n2log(max(Ai))) 注意二分求中位数的细节 若有 n 个数,则中位数为 阅读全文
posted @ 2022-05-23 14:11 hzy0227 阅读(56) 评论(0) 推荐(0) 编辑
摘要:E - Cheap Dinner 枚举 枚举第 2 种食物,求出每个第 2 种与第 1 种食物搭配的和的最小值,把这个最小值赋给第 2 种食物 枚举第 3 种食物,求出每个第 3 种与第 2 种食物搭配的和的最小值,把这个最小值赋给第 3 种食物 枚举第 4 种食物,求出每个第 4 种与第 3 种食 阅读全文
posted @ 2022-05-23 12:32 hzy0227 阅读(13) 评论(0) 推荐(0) 编辑
摘要:C - 1D Sokoban 二分 + 找性质 可分正负的箱子分别讨论 本题的关键是发现一个重要的性质:因为推箱子这个过程会让被推到的箱子成为连续的一段,若想让在特殊位置的箱子最多,则这一段的终点一定要在特殊位置上(起点也可以, 这里的一定不是说不在特殊位置就取不到最优,而是在特殊位置上的某些情况一 阅读全文
posted @ 2022-05-23 12:25 hzy0227 阅读(27) 评论(0) 推荐(0) 编辑
摘要:C - Binary String 找性质 一开始没思路,想到可能跟前缀和,后缀和有关,就先试一下 设 pre00 的个数的前缀和,其他同理 先求出一开始的代价,即 0 的个数,设为 cnt, 当前代价也是 cost=cnt 假设从前面删到下标为 \(i 阅读全文
posted @ 2022-05-23 11:34 hzy0227 阅读(29) 评论(0) 推荐(0) 编辑
摘要:E - Moving Chips 线性dp 一开始想贪心,但 wa 在1101个点。。。 正解是 dp 首先根据一点贪心的思想,若最后在第 i 列,那第 i 列左边的向右走,第 i 列右边的向左走肯定是最优的 pre[i][j] : 最终在 (i,j) ,第 阅读全文
posted @ 2022-05-23 11:15 hzy0227 阅读(44) 评论(0) 推荐(0) 编辑
摘要:2022校赛 - G 食堂在哪里 四川大学在线评测系统 (scu.edu.cn) 换根dp 首先树dp f[u] :以 u 为根的子树中的学生,到 u 这个点的距离和 g[u] :以 u 为根的子树中的学生,包括 u 的学生,吃完 u 的面包后 阅读全文
posted @ 2022-05-23 10:51 hzy0227 阅读(54) 评论(0) 推荐(0) 编辑
摘要:常见积性函数 线性筛求常见积性函数 设 f(n) 为积性函数 n=p1e1p2e2p3e3...pkek, 设 p1 为最小素因子 由积性函数性质,\(f(n) = f(\frac n{p_1^{e_1}})*f(p_1^{e_ 阅读全文
posted @ 2022-05-19 20:05 hzy0227 阅读(70) 评论(0) 推荐(0) 编辑
摘要:狄利克雷卷积 f, g 为数论函数 h=fg, 即 h(n)=d1d2=nf(d1)g(d2) 性质 满足交换律 满足结合律,即 \(p(n)=(f*g)*h=f*(g*h)=\sum\limits_{d_1*d_2*d_3=n}f(d_1)* 阅读全文
posted @ 2022-05-19 20:04 hzy0227 阅读(26) 评论(0) 推荐(0) 编辑
摘要:指数方程 求 axb;(mod;m) 的最小非负整数解,其中 gcd(a,m)=1 暴力做法 因为最长 ϕ(m) 为一个循环,ϕ(m)m 是一个量级的,枚举这个循环,复杂度为 O(m) BSGS算法 只适用于 gcd(a,m)=1阅读全文
posted @ 2022-05-19 20:02 hzy0227 阅读(253) 评论(0) 推荐(0) 编辑
摘要:阶 定义:满足 ax1(modm) 最小的 x 称为 am 的阶 性质:xϕ(m) 求阶: ​ 先将 ϕ(m) 标准分解,\(phi(m)=p_1^{e_1}*p_2^{e_2}*...p_k^{e 阅读全文
posted @ 2022-05-19 20:01 hzy0227 阅读(206) 评论(0) 推荐(0) 编辑
摘要:原根 定义:如果 g(modm) 的阶为 ϕ(m)gm 的原根 g0,g1,...gϕ(m)1 构成了模 m 的简化剩余系 (即 [1,m1] 中与 m 互质的数可以被原根 g 的阶 阅读全文
posted @ 2022-05-19 20:01 hzy0227 阅读(95) 评论(0) 推荐(0) 编辑
摘要:欧拉定理 欧拉定理 ​ gcd(a,m)=1 时, axaxmodϕ(m)(modm) 扩展欧拉定理: ​ axaxmodϕ(m)+ϕ(m)(modm) 证明: a 与 m 互质 阅读全文
posted @ 2022-05-19 19:59 hzy0227 阅读(193) 评论(0) 推荐(0) 编辑
摘要:Lucas 定理 组合数取模 3 (适用于模数较小且为素数,组合数较大的情况) Lucas 定理 给定 n, m, p, p 为素数 把 n, m 拆解为 p 进制 \[ n=n_0*p^0+n_1*p^1+...+n_k*p^k\\ m=m_0*p^0+n_1*p^1+...+m_k*p^k\\ 阅读全文
posted @ 2022-05-19 19:58 hzy0227 阅读(32) 评论(0) 推荐(0) 编辑
摘要:中国剩余定理 构造法(只适用模数两两互质的情况,CRT的本质思想) 对于解线性同余方程组 useless,因为完全可以被增量法代替 但是揭示了若模数两两互质,则线性同余方程组一定有解。 若模数为合数 q, \(q=p_1^{e_1}*p_2^{e_2}*p_3^{e_3}*...p_k^{e 阅读全文
posted @ 2022-05-19 19:57 hzy0227 阅读(81) 评论(0) 推荐(0) 编辑
摘要:扩展欧几里得算法 对于 ax+by=m, 可用 exgcd 求出 d=gcd(a,b) dm ,无解 dm, 则 exgcd 可解出 ax+by=d 的两个解 xx,yy 令 \(a'=\frac ad,\;b'=\fra 阅读全文
posted @ 2022-05-19 19:56 hzy0227 阅读(18) 评论(0) 推荐(0) 编辑
摘要:C - Fox And Names 拓扑排序 要自定义字典序使给出的字符串是按字典序递增的顺序 可对于前后两个字符串可找到一组字母间的关系,转化为差分约束问题 #include <iostream> #include <cstring> #include <algorithm> #include < 阅读全文
posted @ 2022-05-19 19:17 hzy0227 阅读(36) 评论(0) 推荐(0) 编辑
摘要:D - Substring 拓扑排序 #include <iostream> #include <cstring> #include <algorithm> #include <vector> #include <cmath> #include <queue> using namespace std 阅读全文
posted @ 2022-05-19 19:13 hzy0227 阅读(19) 评论(0) 推荐(0) 编辑
摘要:D - Present 位运算 + 思维 + 二分(双指针) 按位考虑,第 k 位是 0 还是 1 只跟前 k 位有关,因此算第 k 位的答案时可对 a 数组的元素 mod2k+1 赋给 bbi+bjk 位是 阅读全文
posted @ 2022-05-19 19:11 hzy0227 阅读(18) 评论(0) 推荐(0) 编辑
摘要:E - Colorings and Dominoes DP + 算贡献 首先观察到每一行的贡献和每一列的贡献是独立的,所以可以单独算出每一行和每一列的贡献之和 对某一行考虑 设 f[i][0] 为第 i 个元素可作为放骨牌的第一个位置的概率,f[i][1] 为第 i 阅读全文
posted @ 2022-05-19 18:59 hzy0227 阅读(26) 评论(0) 推荐(0) 编辑
摘要:D - The Number of Pairs 数论,线性筛 给定 c,d,x 求满足 c[a,b]d(a,b)=x(a,b) 对数 (当 ab 时,(a,b),(b,a) 算两对) 记 lcm=[a,b],gcd=(a,b) 阅读全文
posted @ 2022-05-19 17:33 hzy0227 阅读(17) 评论(0) 推荐(0) 编辑
摘要:双连通分量 边双连通分量 桥 :去掉该边后,图变的不连通 边双连通分量(E-DCC):极大的、不包含桥的连通块 性质: 一个边双连通分量内的任意两个点,之间至少存在两条没有公共边的路径 对边双连通分量缩点后,剩下的边都是桥,每一个连通块都是一颗树 对边双连通分量缩点后,若要把缩点后的图变成一个双连通 阅读全文
posted @ 2022-05-19 17:12 hzy0227 阅读(34) 评论(0) 推荐(0) 编辑
摘要:D - Toss a Coin to Your Graph... 二分 + 判环 + DAGDP 最大值最小化可以想到二分答案 check过程为只给小于等于答案的点之间连边,虽然 k 很大,但如果存在环则一定可以,不存在环就求当前图的最长路,如果最长路 ⇐ k - 1 则可以 判环和求最长路都可用拓 阅读全文
posted @ 2022-05-19 00:02 hzy0227 阅读(37) 评论(0) 推荐(0) 编辑
摘要:拓扑排序 判环 bool topsort() { int cnt = 0; queue<int> q; for (int i = 1; i <= n; i++) if (!din[i]) q.push(i); while(!q.empty()) { int u = q.front(); q.pop( 阅读全文
posted @ 2022-05-18 17:02 hzy0227 阅读(8) 评论(0) 推荐(0) 编辑
摘要:ACWING 368 银河 缩点 + DAG DP + 差分约束 368. 银河 - AcWing题库 tarjan 缩点 判原图中是否有正环,因为原图上所有边都是非负的**(这也是用强连通分量解差分约束的必要条件,否则若有正权边也有负权边,若环上边权总和仍为0,则并不能说明是矛盾的)**, 所以如 阅读全文
posted @ 2022-05-18 16:08 hzy0227 阅读(16) 评论(0) 推荐(0) 编辑
摘要:ACWING 1175 最大半连通子图 缩点 + DAG DP 1175. 最大半连通子图 - AcWing题库 因为一个强连通分量中所有点可互相到达,所以一个强连通分量必然是一个半联通子图 缩点后,求最长链即可(此处的最长指链上的强连通分量中的点数之和最多) 因为已经是DAG,所以求最长链及方案数 阅读全文
posted @ 2022-05-18 15:32 hzy0227 阅读(11) 评论(0) 推荐(0) 编辑
摘要:ACWING 367 学校网络 367. 学校网络 - AcWing题库 第一问:求出强连通分量,答案就是起点个数 第二问:结论:若把一个 DAG 变成一个 强连通分量,则需要加 max() 条边 ​ 当 DAG 只有一个点时特判加 0 条边 #include <iostr 阅读全文
posted @ 2022-05-18 11:40 hzy0227 阅读(11) 评论(0) 推荐(0) 编辑
摘要:C - Berland Regional 算贡献 表面上若从 1n 枚举 k, 再枚举每个学校对第 k 个答案的贡献,复杂度为 O(n2) 但因为一共只有 n 个学生,设每个学校有 cnti 个学生,那么每个学校最多只会对前 \(cn 阅读全文
posted @ 2022-05-17 23:25 hzy0227 阅读(25) 评论(0) 推荐(0) 编辑
摘要:D - Maximum Sum of Products 区间DP 可先算出不反转任何子区间的答案 sum 再利用 区间DP 算出反转 [l,r] 的话会比原来的答案多多少,记为 f[l][r] 转移:\(f[l][r]=f[l+1][r-1]+a[l]*b[r]+a[r]*b 阅读全文
posted @ 2022-05-17 23:03 hzy0227 阅读(19) 评论(0) 推荐(0) 编辑
摘要:D - Min Cost String 若尽量让满足 s[i]==s[j],s[i+1]==s[j+1],i<j(i,j) 对越少,若把 az 视为 025 可构造一种策略:记录一个 cnt[i] 表示数字 i 已经出现了几次,出现第 阅读全文
posted @ 2022-05-17 22:58 hzy0227 阅读(25) 评论(0) 推荐(0) 编辑
摘要:E - Assimilation IV 注意到 n 很小,可以算每个点被至少一个城市覆盖的概率,相加就是期望 本题中直接算点被覆盖的概率并不容易,可以算点没有被任何一个城市覆盖的概率 注意到 d(i,j) 也很小,最大不超过 n+1 可以枚举每个点,按距离从小到大给这 \(n 阅读全文
posted @ 2022-05-17 22:32 hzy0227 阅读(47) 评论(0) 推荐(0) 编辑
摘要:POJ - 3579 Median 二分套二分 Median - POJ 3579 - Virtual Judge (vjudge.net) 对数轴上的点排序后,可枚举左端点,固定左端点后,区间长度关于右端点是单调递增的,因此可以二分 二分答案 check 返回有多少区间小于当前的二分值,求有多少区 阅读全文
posted @ 2022-05-17 21:45 hzy0227 阅读(19) 评论(0) 推荐(0) 编辑
摘要:POJ - 3685 Matrix 二分套二分 Matrix - POJ 3685 - Virtual Judge (vjudge.net) f(i,j)=i2+105i+j2105j+ij f 关于 i 单调递增,关于 j 单调递减 要找第 \(m\ 阅读全文
posted @ 2022-05-17 21:41 hzy0227 阅读(30) 评论(0) 推荐(0) 编辑
摘要:受欢迎的牛 缩点 USACO03FALL / HAOI2006] 受欢迎的牛 G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 用 tarjan 缩点后,在每个强连通分量中的点都可以互相到达。 在 DAG 中 如果有大于 1 个出口,则两个出口之间肯定不能相互到达,所以没有明星 阅读全文
posted @ 2022-05-17 21:32 hzy0227 阅读(22) 评论(0) 推荐(0) 编辑
摘要:SCC 性质: 缩点后为DAG 若一个 DAG 中点的最大出度和最大入度分别为 p, q, 则最少再加 max(p,q) 条边可以使整个图变成一个 SCC tarjan 求 SCC vector<int> G[N]; int tin[N], tim; int scc_cnt, sz[N], 阅读全文
posted @ 2022-05-17 21:26 hzy0227 阅读(284) 评论(0) 推荐(0) 编辑
摘要:树状数组 逆序对 #include <iostream> #include <cstring> #include <algorithm> #define int long long using namespace std; const int N = 5e5 + 10; int tr[N], ran 阅读全文
posted @ 2022-05-16 23:56 hzy0227 阅读(27) 评论(0) 推荐(0) 编辑
摘要:线段树 区间加,区间和 #include <iostream> #include <cstring> using namespace std; typedef long long ll; const int N = 1e5 + 10; ll w[N]; struct Node { int l, r; 阅读全文
posted @ 2022-05-16 23:43 hzy0227 阅读(18) 评论(0) 推荐(0) 编辑
摘要:E - Gold Transfer 树上倍增 + 贪心 由于 ci>cpi, 所以一定是把结点祖先的黄金采完才会采这个结点的,因此某个点有无黄金这个性质具有单调性,靠近根的一侧没有,靠近叶子的有,所以可以倍增查到某个结点上方离根最近的有黄金的结点,从该点开始采 由于一个点被采完才会 阅读全文
posted @ 2022-05-16 22:09 hzy0227 阅读(39) 评论(0) 推荐(0) 编辑
摘要:D - Inconvenient Pairs 思维 不方便的点对就是类似于,这种在同一行块或同一列块的两个点,他们的距离一定大于曼哈顿距离 其中红色为横向点对,紫色为纵向点对 所以可按 y 递增排序,找到每一个行块有多少个点,这一行块中的点对贡献为:\(\binom {cnt}2-\sum\bino 阅读全文
posted @ 2022-05-16 21:51 hzy0227 阅读(34) 评论(0) 推荐(0) 编辑
摘要:D - The Strongest Build BFS + 优先队列 + 哈希 将被 ban 掉的策略存到 map 里,一开始将最大的策略放入优先队列中,每次取队首策略是否被 ban 掉了,如果没有当前策略就是答案 如果被 ban 掉了,那放入比该策略小一点的策略,设队首策略为 \(b_1,b_2, 阅读全文
posted @ 2022-05-15 15:45 hzy0227 阅读(34) 评论(0) 推荐(0) 编辑
摘要:D - Excellent Arrays 思维 + 组合数学 + 树形结合 ai+aj=i+j, 看到这样的形式先移项变成 aii=(ajj), 令 ki=aii, 即 ki=kj ki=aiiy=x+ki, 阅读全文
posted @ 2022-05-15 12:46 hzy0227 阅读(17) 评论(0) 推荐(0) 编辑
摘要:D - Playoff Tournament 树形dp 将字符串颠倒,并把每个结点的左右儿子交换,即可变成二叉树的形式(本题中让左右儿子交换) 首先 dp 算出当前字符串每个结点的答案 注意到修改一个结点时只会影响到他上方一条链上的结点,数目为 logn 级别,因此每次修改复杂度为 \(lo 阅读全文
posted @ 2022-05-15 10:58 hzy0227 阅读(23) 评论(0) 推荐(0) 编辑
摘要:C - Unstable String DP 状态表示:f[i][0/1] 为以第 i 个字符且这个字符为 0/1 结尾的子串的个数 状态转移见代码 因为统计的是有多少子串是稳定的,不是统计有多少稳定的字符串,所以一个位置上只能取 0/1 中最长的 所以答案为 \(\ 阅读全文
posted @ 2022-05-15 10:52 hzy0227 阅读(26) 评论(0) 推荐(0) 编辑
摘要:C - Manhattan Subarrays 枚举 多观察数据,发现当子数组中元素个数 >= 5 时一定不满足条件,因此枚举子数组个数为 3, 4 即可 #include <iostream> #include <cstring> #include <algorithm> #include <ve 阅读全文
posted @ 2022-05-12 23:45 hzy0227 阅读(18) 评论(0) 推荐(0) 编辑
摘要:E - Boring Segments 线段树 + 双指针 题意:有一些线段,每条线段有权值,能把整个区间覆盖住的集合为好集合,求好集合中线段的最大权值 - 最小权值的最小值 首先关于线段覆盖区间的问题,可化段为点,覆盖了一个点视为覆盖了这个点和它右边的长度为 1 的段,因此覆盖了 \([l,r]\ 阅读全文
posted @ 2022-05-12 21:47 hzy0227 阅读(21) 评论(0) 推荐(0) 编辑
摘要:D - Say No to Palindromes 枚举 可观察到只有类似 abcabcabcabc..., bacbacbac... 等 abc 三个字母都循环出现才满足要求 可记录 cnt[i][j][k],前 i 个中 a,b,c 分别在 模 3 余 \(0 阅读全文
posted @ 2022-05-12 21:21 hzy0227 阅读(26) 评论(0) 推荐(0) 编辑
摘要:D - Reverse Sort Sum 线段树 / 树状数组 从后往前遍历,如果 c[i] = i, 则说明第 i 个位置上的 1 是从时刻1到 时刻 i 都存在的,所以这一位最开始就是 1,此时若前 i 位有 k 个 1,它们一定在 [i - k + 1, i] 位置上,这个区间 - 1,这是第 阅读全文
posted @ 2022-05-12 21:08 hzy0227 阅读(25) 评论(0) 推荐(0) 编辑
摘要:C - Line Empire 贪心 每次征服一个国家之后,如果要将首都迁过来,显然之后迁不如现在迁 在征服第 i 个国家后,可利用前缀和 O(1) 算出 迁或不迁 时征服之后国家的代价,若迁的代价小就迁,否则就不迁 #include <iostream> #include <cstring 阅读全文
posted @ 2022-05-12 20:46 hzy0227 阅读(32) 评论(0) 推荐(0) 编辑
摘要:D - Optimal Partition 线段树 + dp 设 s[i] 为前缀和数组,f[i] 为考虑前 i 个数的最大答案。当枚举到第 i 个数时,有状态转移方程如下 \[ 1. \;s[i] -s[j]>0,\;即\;s[j]<s[i]\;(j<i)\\f[i]=max(f[j]+i-j)\ 阅读全文
posted @ 2022-05-12 20:43 hzy0227 阅读(16) 评论(0) 推荐(0) 编辑
摘要:E - Preorder 树形dp 若两颗满二叉树深度相同,一颗二叉树交换任意两个兄弟结点及其子树可以得到另一颗二叉树,则成这两颗二叉树同构 设 u 的左右儿子为 ls,rs 若 ls 与 rs 同构,则 ansu=anslsansrs 否则,ls,rs 交换又是一种新方案, 阅读全文
posted @ 2022-05-12 20:39 hzy0227 阅读(31) 评论(0) 推荐(0) 编辑
摘要:D - Insert a Progression 绝对值 首先算出不插入时的答案 如果插入的数在 [minn, maxn] 中,则没有代价 如果 x > maxn, 则有 (maxn,x] 这些数要产生代价,把他们放到最大值后面,则代价为 2(xmaxn) 若放到开头或结尾,则代 阅读全文
posted @ 2022-05-12 20:32 hzy0227 阅读(76) 评论(0) 推荐(0) 编辑
摘要:D - Progressions Covering 线段树维护差分序列 把问题看作是每次给 b 数组的一个长度为 k 的子段减去一个等差数列,直到所有数小于等于 0 因为子段长度严格为 k,因此对于当前 b 数组中最右边的大于 0 的元素,只能让它尽量作为子段右端点 为了模拟这个过程,在子区间中减去 阅读全文
posted @ 2022-05-12 20:30 hzy0227 阅读(43) 评论(0) 推荐(0) 编辑
摘要:C - Water the Trees 二分 因为奇数天 +1, 偶数天 +2,所以找到最大的 h[i] 记为 maxn,最后的高度只能在 maxn, maxn + 1 中,因为如果答案为 maxn + 2,则可以去掉一些操作,使最大高度为 maxn 二分答案即可 #include <ios 阅读全文
posted @ 2022-05-12 20:27 hzy0227 阅读(26) 评论(0) 推荐(0) 编辑
摘要:E - Math Test 拆绝对值 要求 i=1n|rixi| 的最大值,可以将绝对值拆开,对于每一个 i,若 ri>=xi, 设 sgn[i]=1. 否则设为 sgn[i]=1, \(\sum\limits_{i=1} 阅读全文
posted @ 2022-05-12 20:26 hzy0227 阅读(24) 评论(0) 推荐(0) 编辑
摘要:D - Shuffle 组合数学 记当前枚举的区间从第 i 个 1 到 第 i + k - 1 个 1,记 j = i + k - 1, 那这些 1 可以随意排列的区间为 [pos[i1]+1,pos[j+1]1], 设为 [l,r], 这个区间对答案的贡献为 \(\binom 阅读全文
posted @ 2022-05-12 20:24 hzy0227 阅读(33) 评论(0) 推荐(0) 编辑
摘要:C - Set or Decrease 一定是先对最小的元素使用 -1 操作 再从大到小把元素变为最小值 这样一定是最少操作将序列和减到 k 一下 操作数 = 操作 1 的个数 + 操作 2 的个数,操作 1 可能有很多次,操作 2 是将较大的元素变为最小值,所以可能是 [0, n - 1] 次,所 阅读全文
posted @ 2022-05-12 20:23 hzy0227 阅读(96) 评论(0) 推荐(0) 编辑
摘要:E - Star MST 给出一个 n 个顶点的完全图,边权可以从 [1, k] 中设置,求最小生成树的边权和 == 跟 1 相连的边权和的赋权方案 题意为 2 - n 号结点都与 1 号相连,这个生成树可以是最小生成树的方案数 dp 设 f[i][j] 为当前的生成树中边权最大为 \(i\ 阅读全文
posted @ 2022-05-12 20:13 hzy0227 阅读(19) 评论(0) 推荐(0) 编辑
摘要:D - Martial Arts Tournament 枚举 不能枚举 x, y ,但是可以枚举集合大小,设三个集合大小分别为 2i,2j,2k, 枚举 i,j 即可,复杂度为 O(nlognlogn) #include <iostream> #include <cstring 阅读全文
posted @ 2022-05-12 20:09 hzy0227 阅读(16) 评论(0) 推荐(0) 编辑
摘要:Tokitsukaze and Strange Inequality 维护二维前缀和 s[i][j] 为前 i 个数中比 j 小的有几个 枚举 b,c,分别判断 a,d 有多少种,每对 b,c 的贡献为 cntacntd #include <iostream> #include 阅读全文
posted @ 2022-05-12 20:05 hzy0227 阅读(29) 评论(0) 推荐(0) 编辑
摘要:Tokitsukaze and Good 01-String (hard version) 贪心 两个一组分成 n2 个 01 段 当前这一组不相同,则操作数++,并且让这一组变成和上一组一样的,段数不变 当前这一组相同,如果和上一组相同,段数不变;如果不相同,则段数++。更新 阅读全文
posted @ 2022-05-12 20:03 hzy0227 阅读(84) 评论(0) 推荐(0) 编辑
摘要:E - Messages 思维 因为每个学生最多只能读 k (1 ⇐ k ⇐ 20) 条消息,可以从这个小数据入手 结论:最多贴 20 条消息 可以算出贴 t 条消息时,贴每条消息的贡献,取最大的 t 个贡献相加, 设贡献分别为期望 ai 个学生能读到 若已经贴了贡献最大的 20 条,再贴 阅读全文
posted @ 2022-05-12 20:00 hzy0227 阅读(22) 评论(0) 推荐(0) 编辑
摘要:E - Crazy Robot 搜索 搜索能变成 + 的点,第一次搜到的时候入队 枚举队头的点的邻居,判断是否能变成 + ,能的话也入队(判断的方法就是如果周围的 '.' 的个数 ⇐ 1 就可以变成 + ) 关键:只让能变成 + 的入队,并且每个 + 的邻居都要判断是否能变成 + ,不能因为某个邻居 阅读全文
posted @ 2022-05-12 19:58 hzy0227 阅读(19) 评论(0) 推荐(0) 编辑
摘要:D - MEX Sequences dp 合法序列只有两种 f[x][0] :序列最大值为 x,且序列中包含 1~ x 所有数 f[x][1] :序列最大值为 x,且序列包含 [1, x-2] 所有数与 x 证明:因为当前的值 x 与 mex 的差不能超过 1,所以合法序列的 x = 阅读全文
posted @ 2022-05-12 19:55 hzy0227 阅读(70) 评论(0) 推荐(1) 编辑

点击右上角即可分享
微信分享提示