摘要:
题目链接 题解 易得,左端点或右端点对齐时重叠部分一定是最大的。 可以发现,一定可以通过$+k\cdot gcd(t_a,t_b)\(将左区间尽量右移直至差值\)\le gcd(t_a,t_b)$。证明:根据裴蜀定理——若$a,b$是整数,且$d|gcd(a,b)$,一定存在整数$x,y$,使$ax 阅读全文
摘要:
CF1082E Solution 题目链接 题解 可以发现,修改区间所带来的贡献$=\(区间众数个数\)-$区间中$c$的个数。 设$dp[i]$表示$r=i$时修改区间所带来的最大贡献,$lst[i]$表示上一个值为$i$数的下标,$dp[i]=dp[lst[a_i]]+1-lst[a_i]$到$ 阅读全文
摘要:
题目链接 题解 可以发现,为了左下到右上经过的方格边长相等,要么将左下右上曼哈顿距离上的方格全部分割,要么避开全部曼哈顿距离上的方格。 此段为下段的证明,如果节约脑细胞且只希望感性理解的读者可以略过 (¬‿¬) → 暂且忽略边长,并只考虑在同一边长的小正方形中分割。设大正方形边由$m$个小正方形组成 阅读全文
摘要:
题目链接 题解 下文将“以该节点为根时树的最大深度最小”的节点称为“最小节点”,并将“以最小节点为根时树的最大深度”称为“最小深度”。 题目给出的是无根树森林,易得对于每一棵树来说,使“最小节点”与其他树连接最优。而最终方案则是将所有树与“最小深度”最大(或第二大)的树建边,证明: 设树$A,B,C 阅读全文
摘要:
题目链接 题解 可以想到,这道题需要维护每日的内核数,并利用贪心思想找出该日价值从小到大的前$k$个内核。第一想法是优先队列+二分,但无法处理出队,于是卡住了(# -_ゝ-)。此后阅读了一篇题解,发现可以使用权值线段树。 线段树中维护当日每个价值的内核个数(因为$p_i\le 10^6$,不需要离散 阅读全文
摘要:
题目链接 题解 题意可以理解为:是否能将$a$序列中的每个数分为$l_i+r_i$,并满足$l$序列单调不升,$r$序列单调不降。以$l$举例,如果想从左边减去$a_i$,一定会减去$a_i$左侧的每一个数,因此$l_i$单调不升。为满足此,$l_i$一定$\le l_$,而为满足$r_i\ge r 阅读全文
摘要:
题目链接 题解 如果$k$整除两个接起来的数$a_i,a_j$,它们一定满足$k|(a_i\cdot10^+a_j)$,其中$dig_j$为$a_j$的数位。由于求余运算的可加、乘性,$a_i,a_j$需要满足$k|[(a_i%k)\cdot(10^%k)+a_j%k]$,也就是只需知道$a_i$、 阅读全文
摘要:
题目链接 题解 易得为使序列最小,前$k$个经过的点一定都是$a$,而这些经过的点中一些原本即为$a$不用变换,因此用$f$数组记录到点$(i,j)$能经过$a$的最大数量。另设$maxs$表示只经过原本为$a$或变换后为$a$的点的最大步数,如果$f_{i,j}+k$(最大$a$数量)\(=i+j 阅读全文
摘要:
题目链接 题解 很普通的数位dp题呐,$state$表示$>0$的数位个数。 AC代码 #include<bits/stdc++.h> #define int long long using namespace std; int dp[20][5],a[20],cnt; int dfs(int po 阅读全文
摘要:
题目链接 题解 答案一定可以为一条链,因为对于答案树中的每个节点将其子节点从大到小排序放入链尾后依旧成立。 探讨限制条件:(1)$b$只能为$n$,因为$n$一定是它所在连通分量中的最大值。(2)设$cnt_i$表示$i$作为$a$出现的次数,则$\sum\limits_^icnt_j<i$,因为每 阅读全文