• 一些题(十四)


    [JOI 2022 Final] Sandcastle 2

    考虑如何让判定一个矩形合法,将每个格子向它四周比它小的最大的格子连一条边,那么合法相当于这个图存在一条哈密顿路径。由于每个点出度至多为 \(1\),于是也相当于入度为 \(0\) 的点只有一个。于是可以矩形分治,每次沿长宽中较小的一维切开,计算跨过切痕的合法矩形数。在切痕上枚举矩形的两个边界,然后矩形的另外两个边界分别往外扩展,容易统计入度为 \(0\) 的点的个数,然后可以 \(O(1)\) 合并两边的结果。时间复杂度 \(O((nm)^{1.5})\)

    [CF1500F] Cupboards Jumps

    假如当前填完了 \(h\) 的前 \(i+2\) 项且满足了 \(w_{0\ldots i}\) 的限制,发现只用记录 \(|h_{i+1}-h_{i+2}|\) 能取到的值就可以往下递推了。考虑转移,发现每次合法的只是一个连续段和一些点,转移可能会绕着某个位置对称,维护一些标记就好了。

    https://codeforces.com/contest/1500/submission/149635617

    [HNOI2009] 积木游戏

    直接模拟整个过程,对每个块成为一个空洞的上/左/右边分别讨论。对于前者可以之间线段树维护区间最大值和最大值段数,而后两者可以对每一列用 set 维护竖直上空的连续段。然后注意一堆细节就好。

    https://www.luogu.com.cn/record/71391559

    [CodeChef] MAXDTREE

    考虑高位往低位填,假设当前填到第 \(i(i>1)\) 位,此时个位上的数为 \(x\),而第 \(2\)\(i-1\) 位上的数全是 \(0\),那么仅使第 \(i\) 位数加一时个位的变化只与大于等于 \(i\) 位的位上值的最大值有关。于是可以把这个最大值记到状态里,然后容易 dp 预处理求出每种情况的个位变化。预处理一堆东西后,最后计数时可以按照 dfn 序进行 dp 套 dp,记录当前填的位数、个位的值、前面填过的最大值即可转移。

    [CF765F] Souvenirs

    将询问离线,然后从左至右扫描线,扫到 \(i\) 时对所有 \(j\in [1,j-1]\) 求出 \(\min_{j<k\le i} |a_j-a_k|\)。考虑加入 \(i\) 时需要更新哪些 \(j\),先考虑 \(a_j>a_i\) 的部分,另一部分同理。那么首先要更新的是 \(i\) 左边第一个满足 \(a_j>a_i\)\(j\),然后是更左边第一个满足 \(a_{j'}>a_i\land |a_i-a_{j'}|<|a_j-a_{j'}|\)\(j'\),以此类推。发现这个不等式等价于 \(a_{j'}<(a_j-a_i)/2\),也就是说每次 \(j'\) 的值域至少减半,那么这个过程至多会进行 \(O(\log A)\) 次。于是找 \(j'\) 用权值线段树,更新后缀 \(\min\) 用树状数组即可做到 \(O((n+q)\log n\log A)\)

    [CF1205D] Almost All

    先考虑如何填边权使得从根出发的 \(n-1\) 条路径权值分别为 \(1,\ldots,n-1\)。发现只用给每条边填它连接的两点 dfs 序之差即可。然后考虑把根的儿子的子树分成大小为 \(p,q\) 的两部分,每部分分别按如上方法填,再给第二部分的边权乘 \(p\),这样就能分别找到经过根的长为 \(1,\ldots,(p+1)(q+1)-1\) 的路径。而取重心为根,将儿子按子树大小降序贪心取即可使 \(\min(p,q)\ge (n-1)/3\),此时 \((p+1)(q+1)-1\ge 2n^2/9\)

    [UER #10] 磁球与磁棍

    首先 \(O(n^2)\) 的记录子树内分成的块数的树形背包是显然的,考虑如何减少状态。一个观察是若存在分成 \(k\neq n-3\) 块的合法方案,那么一定存在分成 \(k+2\) 块的合法方案,而一定不可能存在分成 \(n-1\) 块的合法放按。证明可以考虑对与叶子不同色的点连出的边进行调整。于是可以将树形 dp 的状态改为记子树内能合法地分成奇/偶数块的最小块数,还原方案时可以先找到最少块数再按上述方法调整。

    [AGC023E] Inversions

    随便推式子算算就好了。

    https://atcoder.jp/contests/agc023/submissions/30665015

    [CF1656G] Cycle Palindrome

    先随便找一个排列将它变成回文串,然后通过交换 \((i,n-i+1)\) 和同时交换 \((i,j),(n-i+1,n-j+1)\) 这两种操作把它变成只有一个环,方法显然。

    https://codeforces.com/contest/1656/submission/152576612

    [USACO22OPEN] Hoof and Brain P

    注意到若一个指示物所在节点去重后只有一个出边,那么 B 可以强制让这个指示物走到出边连向的点。于是每次选择一个只有一个出边的点,将它与连向的点合并,一直重复。最后 B 胜当且仅当这两个指示物在同一个缩完后的点上。这个过程可以启发式合并实现。

    https://www.luogu.com.cn/record/73287297

  • 相关阅读:
    结对第二次作业——某次疫情统计可视化的实现
    结对第一次—疫情统计可视化(原型设计)
    个人作业——软件工程实践总结&个人技术博客
    虚拟列表(VirtualList)在Taro3中的使用
    结对第二次作业—某次疫情统计可视化的实现
    结对第一次—疫情统计可视化(原型设计)
    软工实践寒假作业(2/2)
    软工实践寒假作业(1/2)
    个人作业——软件工程实践总结&个人技术博客
    Spring Boot
  • 原文地址:https://www.cnblogs.com/Y25t/p/16191499.html
Copyright © 2020-2023  润新知