摘要:
最优的方案应该是先往一个方向走,然后走回来,再往另一个方向走不回来。考虑用 dp 模拟这个过程。设 \(f_{i,0/1}\) 表示从第 \(i\) 个点出发往左走,不一定/一定回到 \(i\) 号点的最大次数,则有转移: \[\begin{array}{l} f_{i,1}=f_{i-1,1}+a 阅读全文
posted @ 2025-09-12 19:42
FormulaOne
阅读(8)
评论(0)
推荐(1)
摘要:
大胆猜测,所有数的最大公约数一定很小:偶数时为 \(1\),奇数时为 \(2\)。设两个正整数 \(n,m\) 且 \(n<m\),最大公约数 \(\gcd(k^{2^n}+1,k^{2^m}+1)=d\),则有 \(k^{2^n}\equiv k^{2^m} \equiv -1\pmod d,k^ 阅读全文
posted @ 2025-09-12 19:41
FormulaOne
阅读(8)
评论(0)
推荐(0)
摘要:
根据贪心策略,应当选择 \(k\) 个最小的负数改为正数,或选择 \(k\) 个最大的正数改为负数,才可能使答案最大。那么可以先把数按正负分开,并确定每个数在同符号数中的排名。建立权值线段树,记录每个数出现的次数、单个数大小、总贡献和,查询时类似线段树二分,如果数值较大的区间不够用,就往数值较小的区 阅读全文
posted @ 2025-09-12 19:41
FormulaOne
阅读(8)
评论(0)
推荐(0)
摘要:
记字符集大小 \(A=26\)。 我们并不关心一段字符串怎么变化,只关心变化之后能得到什么字母。设 \(f1_{i,j,z}=0/1\) 表示字符串 \(s_1\) 的 \([l,r]\) 子串不可以/可以变成字母 \(z\)。枚举合并点 \(k\),则有 \[f1_{i,j,z} \leftarr 阅读全文
posted @ 2025-09-12 19:40
FormulaOne
阅读(10)
评论(0)
推荐(0)
摘要:
首先将弹珠按坐标从小到大排序。设 \(f_i\) 表示前 \(i\) 颗弹珠,强制固定第 \(i\) 颗弹珠的最小代价,则有显然的转移: \[f_i=\min_{1\le j <i}f_j+\sum_{k=j+1}^{i-1}(x_k-x_j)+c_i \]将和式展开,使用前缀和维护 \(x_k\) 阅读全文
posted @ 2025-09-12 19:40
FormulaOne
阅读(10)
评论(0)
推荐(0)
摘要:
将每个 01 串看作一个二进制数,将长度从小到大排序,对于当前第 \(i\) 个串,首先在第 \(i-1\) 个串的基础上加 \(1\)(如果不能加 \(1\) 即爆位数则无解),如果长度相同则无需任何操作,否则按照缺少的长度从后面补 \(0\)。这样做能保证长度短的不为长度长的前缀,且尽可能的多填 阅读全文
posted @ 2025-09-12 19:39
FormulaOne
阅读(6)
评论(0)
推荐(0)
摘要:
由于任意两个圆没有交点,故不存在翻一次栅栏能穿过两个圆。那么对于每个栅栏,如果两个点一个在内一个在外,则必须翻,否则不用翻。时间复杂度 \(O(mk)\),可以通过。 #include<iostream> #include<cstdio> #include<algorithm> #include<m 阅读全文
posted @ 2025-09-12 19:39
FormulaOne
阅读(7)
评论(0)
推荐(0)
摘要:
首先 \(1\) 的总个数不能被 \(n\) 整除时无解。 否则一定有解(因为每一列上的 \(1\) 的位置都可以随意变动,故实际上相当于可以随便放)。为了步数最少,一定是用缺少 \(1\) 行的 \(0\) 与过多 \(1\) 行的 \(1\) 交换,这样能同时使两行更接近答案。实现时先枚举列,再 阅读全文
posted @ 2025-09-12 19:39
FormulaOne
阅读(7)
评论(0)
推荐(0)
摘要:
挺神奇的思维题。 首先将所有元素按 \(a\) 从大到小排序,考虑交叉选,即要么 \(a_1,a_3,a_5,\cdots,a_{2n-1}\),要么 \(a_1,a_2,a_4,\cdots,a_{2n-2}\)。无论选哪种,\(a\) 一定满足要求(前者 \(a_1>a_2,a_3>a_4,\c 阅读全文
posted @ 2025-09-12 19:38
FormulaOne
阅读(8)
评论(0)
推荐(0)
摘要:
设 \(f_i\) 表示前 \(i\) 个事件发生后的最大收益,如果第 \(i\) 个事件是获得硬盘,则 \(f_i \leftarrow f_{i-1}\),否则二分找到最大的 \(j\) 使第 \(j\) 个事件得到的硬盘与当前需要的相同(尽可能减少对前面的影响。可以预处理每种硬盘对应的事件编号 阅读全文
posted @ 2025-09-12 08:18
FormulaOne
阅读(15)
评论(0)
推荐(0)
摘要:
考虑 dp。设 \(f_i\) 表示到位置 \(i\) 所需的最小花费,且第 \(i\) 个位置必选,现在要找上一个决策点 \(j\),这个点应该要在此前所有区间的左端点的后面,才能保证这些区间能被覆盖(即确保至少一个在之前每个区间内),则 \(j\) 应满足 \(\max_{r_k<i}l_k \ 阅读全文
posted @ 2025-09-12 08:17
FormulaOne
阅读(4)
评论(0)
推荐(0)
摘要:
发现不满足题意的情况就是一个节点到多个子节点的边的字母相同,那么合法当且仅当每个节点到子节点的字母互不相同。那么可以统计每个节点连接的字母数量,并运用类似换根 dp 的思路,快速更新这个数量并实时维护符合条件的点的数量即可。时间复杂度 \(O(nA)\),其中 \(A=26\) 为字符集大小。 #i 阅读全文
posted @ 2025-09-12 08:17
FormulaOne
阅读(7)
评论(0)
推荐(0)
摘要:
[SNCPC2019] Unrooted Trie 发现不满足题意的情况就是一个节点到多个子节点的边的字母相同,那么合法当且仅当每个节点到子节点的字母互不相同。那么可以统计每个节点连接的字母数量,并运用类似换根 dp 的思路,快速更新这个数量并实时维护符合条件的点的数量即可。时间复杂度 \(O(26 阅读全文
posted @ 2025-09-12 08:17
FormulaOne
阅读(8)
评论(0)
推荐(0)
摘要:
考虑 dp。设 \(f_i\) 表示恰好有 \(i\) 种染色方案所需的最少点数,根据乘法原理,若 \(i \mid j\),则 \(f_j \leftarrow \min f_{\frac{j}{i}}+ f_{i-2}\)(由于是由两棵数合并为一棵树,故其中的一个树根不再要求为绿色,可以变为黄色 阅读全文
posted @ 2025-09-12 08:16
FormulaOne
阅读(4)
评论(0)
推荐(0)
摘要:
注意到一条边无论方向如何,都能使两端的某一个点到达另一个点,即至少有 \(n-1\) 对。如果只需要 \(n-1\) 对,那么只需要在每一条链上相邻的边方向相反即可。对于剩下的一对,我们可以找到一个度数为 \(2\) 的点,并把连接的两条边由反向改为同向,那么附近的三个点产生的对数由 \(2\) 变 阅读全文
posted @ 2025-09-12 08:16
FormulaOne
阅读(7)
评论(0)
推荐(0)
摘要:
设 Alice 取的位置为 \(i,j,k\) 且 \(i<j<k\),则 Bob 的最优策略有两种:取 \(n\) 或 \(k\)。为了使 Alice 必胜,必须同时满足 \(a_i+a_j+a_k>a_n,a_i+a_j>a_k\)。枚举 \(i,j\),显然满足两个条件的 \(k\) 都是一段 阅读全文
posted @ 2025-09-12 08:15
FormulaOne
阅读(8)
评论(0)
推荐(0)
摘要:
显然,每一层恰好能放下两个球(事实上这也是最优的方案),那么下面一共可以放 \(\lfloor \frac{h}{r} \rfloor \times 2\) 个球,剩余 \(h - \lfloor \frac{h}{r} \rfloor \times r+r\) 的高度,记 \(h'=h-\lflo 阅读全文
posted @ 2025-09-12 08:15
FormulaOne
阅读(19)
评论(0)
推荐(0)
摘要:
先枚举矩形左上角坐标 \((x_1,y_1)\),以及右下角横坐标 \(x_2\),则可得右下角纵坐标 \(y_2\in [y_1,m]\)。显然,随着 \(y_2\) 的增大,矩形内符合图形的数量只增不减,故可以二分出第一个位置使得该数量恰好为 \(k\)。计算矩阵内符合图形的数量使用二位前缀和。 阅读全文
posted @ 2025-09-12 08:15
FormulaOne
阅读(8)
评论(0)
推荐(0)
摘要:
注意到横着的障碍如果左端点不是 \(1\) 那么是一定不用拆的(要么把挡在它下面的左端点是 \(1\) 的障碍直接拆掉,要么拆掉若干个竖的障碍然后把左端点是 \(1\) 的障碍绕掉,反正拆了也没用,左端点是 \(1\) 的还会挡着)。那么对竖的障碍和有效的横的障碍分别按横坐标排序后,考虑二分答案,判 阅读全文
posted @ 2025-09-12 08:14
FormulaOne
阅读(5)
评论(0)
推荐(0)
摘要:
2025-6-23 446B \(2000\),绿。贪心,优先队列。 直接行或列取最大值是错的。注意到最终的总答案与操作的顺序无关(操作的顺序就是先减后减的问题)。因此我们不妨先执行所有行操作再执行所有列操作。设执行行操作 \(i\) 次,列操作 \(k-i\) 次,则一共产生 \(i\times( 阅读全文
posted @ 2025-09-12 08:14
FormulaOne
阅读(18)
评论(0)
推荐(0)

浙公网安备 33010602011771号