zoukankan      html  css  js  c++  java
  • 省选模拟32 题解

    A. 送你一道签到题

    这个函数显然是个积性函数。

    刚开始的想法是可以直接考虑分开每个质因子,然后乘一块的贡献显然是正确的。

    后来一想这个玩意实际上就是 $id^k$ 点积上 $d(x)$ 的 $m$ 次卷积,所以肯定是积性的。 

    然后看这个数据范围,显然要搞个 min25筛。

    然后一想,这个玩意,质数处取值简单,$p^k$ 处的取值只与 $k$ 有关,可以直接通过 dp 预处理。

    然后这个玩意就完美符合 min25筛 的要求,所以直接整上去就完事了。

    B. 神犇

    凭借原来的经验,我们可以把区间内出现次数相同转化为差分后前缀和相同。

    然后对每种前缀和开一棵 01trie 树,直接容斥算 size 大小就解决了。

    当内存开到 512MB 的时候,上述做法是能过通过的。

    如果内存压到 256MB ,就需要一些优秀的压内存技巧。

    容易发现 01trie 树上的很多点是没有必要的,当只有一条单独的链的时候,可以把这条链的信息直接压在一起考虑。

    然后是一个常用的压儿子的技巧,就是使左右儿子中的一个的编号恰好等于这个点的编号+1。

    size 数组可以直接用 unsigned short 存储,但是会爆,所以在爆的时候用儿子编号数组的最高位存一下爆了几次。

    正解的思想大概是省掉了容斥,通过维护几个多元组,来实现如果存在合法解一定能找到的效果,但是挺恶心的,没懂具体做法。

    C. 开挂

    大概的思想是枚举最终恰好框住所有 $1$ 的最小的矩形,然后考虑计算这样的方案数。

    如果有了这个大矩形,那么用两个 $x*y$ 的矩形的最优策略一定是选择两个对角。

    另外,在这个大矩形内,必须有 $1$ 覆盖每一条边。

    然后可以发现这个玩意就转化为了一个简单的 dp 问题,把以上 $6$ 种信息状压一下,然后直接暴力 dp 就完事了。

    另一种做法是直接容斥,就是通过枚举几条边没有选上来容斥出每条边都选上的方案数。

  • 相关阅读:
    二分图最大匹配的König定理及其证明
    HDOJ 2389 Rain on your Parade
    HDOJ 1083 Courses
    HDOJ 2063 过山车
    POJ 1469 COURSES
    UESTC 1817 Complete Building the Houses
    POJ 3464 ACM Computer Factory
    POJ 1459 Power Network
    HDOJ 1532 Drainage Ditches
    HDU 1017 A Mathematical Curiosity
  • 原文地址:https://www.cnblogs.com/skyh/p/12369083.html
Copyright © 2011-2022 走看看