zoukankan      html  css  js  c++  java
  • 数学专题测试3

    A. young

      大概的意思是,将原图根据最高的二进制位分成两个部分,那么只要在这两个部分之间连一条边,统计这条边的方案数就可以统计贡献。

      为了辅助转移,可以考虑枚举最小边的权值,之后就可以根据最高位的不同继续分成两个集合,于是可以递归下去求解。

      然而并没有改。

    B. Simple

      难点大概在于第一步。

      如果这个数中出现了循环节,那么一定不合法。如果没有循环节,那么将所有排列枚举出来,发现只有字典序最小的那一个数是合法的。于是所有没有循环节的数循环同构之后都必然会对答案贡献1。

      于是只要求没有循环节的数的个数,发现这个东西和约数有很大关系,推一推可以发现是莫比乌斯,于是直接容斥就好了。

      然后再推一推式子,发现要求的是$i*mu(i)$的前缀和,卷上$id$就变成了$e$,于是直接杜教筛就好了。

    C. 小 H 爱染色

      似乎没有想象中那么难。

      推式子,发现只需要$ans(n)=sumlimits_{i=0}^{n-m} f(i)*inom{n-i}{m}^{2}$,将相邻两项做差就是答案。

      由于组合数是个$m$次多项式,$f$是个m次多项式,所以ans是个$3*m+1$次多项式,所以只要求出前$3m+2$项就可以暴力插值出第N项。

      所以直接暴力NTT优化插值求出$f$然后暴力NTT求出$ans$就可以愉快的TLE了,然后去卡一年常就可以AC了。

      然而这似乎并不是正解。由于我们只需要求两项的值,所我们并不需要$ans$这个多项式,实际上只要在n处的取值正确就可以了。

      于是可以构造另一个多项式,使得这个多项式与$ans$在n处的取值相同即可,并且这个多项式的前$3m+2$项易于求出。

      所以可以省掉一次NTT。

      并不是很理解。

  • 相关阅读:
    JavaScript中的__proto__
    移动前端调试页面–weinre
    nodo合并多个mp3文件
    enctype和Content-type有什么关系
    vscode 实用的插件
    前端跨域问题及解决方案
    小小的js
    如何使用eslint
    RN记录
    numpy的索引
  • 原文地址:https://www.cnblogs.com/hzoi-cbx/p/12178260.html
Copyright © 2011-2022 走看看