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 就完事了。

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

  • 相关阅读:
    C#之线程
    C#反射与进程
    C# XML文件的读取
    超简单的js实现提示效果弹出以及延迟隐藏的功能
    使用JavaScript随机生成数字混合字母的验证码
    用JavaScript写一个简单的倒计时,可以应用在发送短信验证码的“59秒后重新发送验证短信”
    php中curl、fsockopen的应用
    待研究
    做网站用UTF8还是GB2312?
    ECshop 数据库表结构
  • 原文地址:https://www.cnblogs.com/skyh/p/12369083.html
Copyright © 2011-2022 走看看