随笔分类 -  题解

摘要:比较巧的题。 先考虑只有 \(1\) 操作时怎么做,显然答案为满足 \(1\le i<n\land A_i>A_{i+1}\) 的 \(i\) 的个数,即每次选一段尽量长的不降段进行操作。 接下来加上 \(2\) 操作,考虑对每个 \(i\) 将 \(A_i\) 分为 \(x_i\) 和 \(A_i 阅读全文
posted @ 2025-02-28 09:37 zifanwang 阅读(5) 评论(0) 推荐(0) 编辑
摘要:首先有个显然的费用流做法,可以直接把任意两异色点连边然后求匹配,但是边数太多无法通过。 考虑一个经典的转化:对于两点 \((x_1,y_1),(x_2,y_2)\) 之间的曼哈顿距离有 \(|x_1-x_2|+|y_1-y_2|=\max\{x_1+y_1-x_2-y_2,-x_1+y_1+x_2- 阅读全文
posted @ 2025-02-28 09:36 zifanwang 阅读(3) 评论(0) 推荐(0) 编辑
摘要:考虑确定每条边有多少条正向的和反向的,然后直接 BEST 定理求。 考虑存在欧拉回路的条件,每个点的入边个数需要和出边个数相等,那么只需要枚举 \((1,2)\) 的个数便可以确定其它每种边的条数,直接做即可。 参考代码: #include<bits/stdc++.h> #define ll lon 阅读全文
posted @ 2025-02-28 09:36 zifanwang 阅读(2) 评论(0) 推荐(0) 编辑
摘要:记 \(a_i\) 表示 \(d\) 天后第 \(i\) 个人拥有的宝石数,则确定每天被选择的人的方案数为 \(\frac{d!}{\prod_{i=1}^n (a_i-1)!}\),确定宝石分裂顺序的方案数为 \(\prod_{i=1}^n(a_i-1)!\),可以发现得到任意一种 \(a\) 序 阅读全文
posted @ 2025-02-18 15:22 zifanwang 阅读(3) 评论(0) 推荐(0) 编辑
摘要:先去掉相邻两个都填完的位置,对于两个都没填的记个数为 \(c\),最后只需要将答案乘上 \(c!\)。 接下来考虑从小到大枚举所有数进行 dp,记 \(f_{i,j,k}\) 表示考虑完前 \(1\sim i\),有 \(j\) 个数需要跟一个位置确定的数匹配,有 \(k\) 个数需要跟后面一个自由 阅读全文
posted @ 2024-12-19 16:07 zifanwang 阅读(6) 评论(0) 推荐(0) 编辑
摘要:一道妙妙题。 一句话题意:求点分树的高度最小值。 给所有点填上一个数表示它子树 \(k\),考虑一种填法什么时候满足条件,发现当且仅当任意两对值相同的点之间的路径上存在一个权值更大的点。 考虑随便找一个点作为根从叶子节点开始贪心填值,每次选择能填的最小值,发现这样填最终的值的最大值一定是最小的。 在 阅读全文
posted @ 2024-12-19 14:30 zifanwang 阅读(3) 评论(0) 推荐(0) 编辑
摘要:首先容易发现含有 \(2n\) 的那一堆不会被删掉,记其为 \(a\),另一堆为 \(b\)。记 \(p_i\) 表示最小的 \(j\) 满足 \(j\ge i\land a_j>b_i\),那么至少要在 \(a\) 堆中删除 \(\max\{p_i-i,0\}\) 个数才能删除 \(b_i\),那 阅读全文
posted @ 2024-12-19 08:04 zifanwang 阅读(13) 评论(0) 推荐(0) 编辑
摘要:考虑维护若干个联通快,初始化每个点一个连通块。对每个联通块维护大小、\(\sum_xa_x\) 还有最优期望,每次选择两个联通快合并。考虑两个联通快 \(a,b\) 哪个在前面更优。 记 \(a_c,a_s,a_d\) 分别表示连通块 \(a\) 的点数、\(\sum_xa_x\) 以及最优期望,\ 阅读全文
posted @ 2024-12-18 09:34 zifanwang 阅读(11) 评论(0) 推荐(0) 编辑
摘要:考虑确定哪些点不动,这些点一定构成一个单调递增子序列,那么对于剩下的点: 若在它之前存在一个不动点大于它,则需要花费 \(b\) 的代价向前移动。 若在它之后存在一个不动点小于它,则需要花费 \(a\) 的代价向后移动。 如果两个都不存在,则它一定可以加入不动点序列。 考虑 dp,记 \(f_{i, 阅读全文
posted @ 2024-12-18 09:33 zifanwang 阅读(4) 评论(0) 推荐(0) 编辑
摘要:考虑 dp,记 \(dp_{i,j}\) 表示确定前 \(i\) 个数最后一个数为 \(j\) 的方案数,则: \[dp_{1,i}=[x_1\mid i]\\ dp_{i,j}=[x_{i-1}\mid j]\sum_{k=1}^m dp_{i-1,k}[\gcd(k,j)=x_{i-1}][x_ 阅读全文
posted @ 2024-12-07 00:01 zifanwang 阅读(3) 评论(0) 推荐(0) 编辑
摘要:显然可以对答案奇偶分别二分,判断用点分治。考虑对每个点记录到当前分治中心的路径正着和倒着的 hash 值,那么两个点之间的路径是回文路径可以用一个简单的式子表示,移项一下把跟一个点有关的值放到一边,用 unordered_map 记录/查询即可,需要卡常,时间复杂度 \(\mathcal O(n\l 阅读全文
posted @ 2024-12-05 23:30 zifanwang 阅读(3) 评论(0) 推荐(0) 编辑
摘要:首先容易确定每个位置的上界,接下来考虑对每种上界分别求方案数,再乘起来。 对每一种上界将其对应的位置提出来,由于是区间 \(\max\),只需要关注每个位置的值是否到达这个上界 \(x\)。枚举一个前缀,考虑维护 \(f_i\) 表示最后一个达到上界位置为 \(i\),确定完这个前缀中所有数的方案数 阅读全文
posted @ 2024-12-01 23:10 zifanwang 阅读(47) 评论(0) 推荐(0) 编辑
摘要:先把是否有色的约束处理掉。累一个前缀和,对每个位置判一下即可。 考察区间覆盖的性质,显然最后一个操作的区间内的颜色一定与其覆盖的颜色相同。考虑从后往前确定操作的顺序,一个操作只要满足这个条件就可以作为当前的最后一个操作,如果有多个满足条件的操作,随便取一个都合法。 考虑维护满足条件的操作,每次取出一 阅读全文
posted @ 2024-12-01 16:20 zifanwang 阅读(7) 评论(0) 推荐(0) 编辑
摘要:先考虑构建树的形态,显然可以将所有边按边权从小到大排序,构造最小生成树。注意到相邻的两个点之间的颜色数只可能是 \(1\) 或 \(2\),所以只考虑边权 \(\le 2\) 的就好了。 接下来考虑怎么染色。考虑从一个点开始 dfs,每次确定当前遍历到的点的颜色,考察当前点到父亲的边权: 等于 \( 阅读全文
posted @ 2024-11-29 17:36 zifanwang 阅读(3) 评论(0) 推荐(0) 编辑
摘要:用 \(1\) 表示 A,\(0\) 表示 B,观察进行一次操作后字符串会发生什么变化。首先当第一个数为 \(1\) 时,只会将第一个数变为 \(0\)。对于剩下的情况,手玩一下可以发现会将第一个数移到末尾,然后将所有数异或 \(1\)。 先考虑暴力怎么做,可以记一个指针 \(i\) 和当前应该给全 阅读全文
posted @ 2024-11-13 15:36 zifanwang 阅读(6) 评论(0) 推荐(0) 编辑
摘要:首先将序列排序,这是显然的。 考虑倒着确定 \(b\) 序列中的每个数。即从完整的 \(a\) 序列开始,每次删掉两个数,记录中位数。 先找出 \(b\) 序列合法的条件。容易发现对于所有 \(i\),在 \(b_{p_i}\) 成为中位数时,\(p_i,p_{i+1}\) 之间的所有数都已经被删除 阅读全文
posted @ 2024-11-11 16:31 zifanwang 阅读(5) 评论(0) 推荐(0) 编辑
摘要:先考虑所有 \(l_i=r_i\) 时怎么做,可以建出反向 Trie 树,问题转化为从根开始每次向左子树或右子树走,第一个拿到空子树的人输,直接在 Trie 上 dp 即可。 考虑从叶子层开始对每一层的点合并两个子树的 dp 值,发现每一层值相同的连续段是较少的。于是可以维护这些连续段,每次合并要将 阅读全文
posted @ 2024-10-22 16:33 zifanwang 阅读(7) 评论(0) 推荐(0) 编辑
摘要:考虑对于一个解,将每对 \((e_1,e_2)\) 中 \(e_1\) 的终点权值 \(+1\),\(e_2\) 的起点权值 \(-1\),那么最终每个点的权值一定是 \(0\)。 考虑先将每条边的终点权值都 \(+1\),那么现在要做的就是选一些点将其起点和终点的权值都 \(-1\),使得最终每个 阅读全文
posted @ 2024-09-30 15:12 zifanwang 阅读(7) 评论(0) 推荐(0) 编辑
摘要:发现数据范围很小,考虑最小割。先对题面做一个转化: 构造两个序列 \(X=(X_1,X_2,\dots,X_N),Y=(Y_1,Y_2,\dots,Y_N)\) 最小化 \(\sum X_i+Y_i\),有 \(M\) 个限制,每个限制有一个序列 \(A_1,A_2,\dots,A_n\),需要满足 阅读全文
posted @ 2024-09-26 16:32 zifanwang 阅读(7) 评论(0) 推荐(0) 编辑
摘要:对于一个固定的右端点 \(r\),左端点 \(l\) 合法当且仅当 \(\max(d_l,d_{l+1},\dots d_r)\le r-l+1 \le\min(c_l,c_{l+1},\dots,c_r)\)。 容易得到一个很朴素的 dp:记 \(f_i\) 表示前 \(i\) 个位置可以分成的组 阅读全文
posted @ 2024-09-19 23:39 zifanwang 阅读(15) 评论(0) 推荐(0) 编辑

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