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

    A. young

    大概的意思是说,由低到高考虑不同的二进制位。

    形成一个最小生成树,那么最高二进制位不同的情况一定只出现一次。

    所以除掉最高位之后的情况形成两个集合,递归下去$dp$就好了。

    一个技巧是,将每个方案的最小值的总和,即$sum limits_{i}min(i)$转化为$sum limits_{i=1}^{infty}f(min>=i)$。

    然而还没有改这个题,所以以上都是我在yy。

    B. Simple

    隐藏的很深的一道题,完全没有思路。

    颓过题解之后会发现并不难,题意要求从首位开始的数是最小的。

    也就是说首位的字典序最小。

    不妨考虑每一个循环同构串$S$,当这个串存在长度小于$|S|$的循环节,那么无论如何循环都无法使首位的字典序最小。

    否则,只有把字典序最小的串放到最前面是合法的。

    所以只要求出不同长度的不含循环节的串个数就好了。

    然后就发现这个东西是显然的莫比乌斯反演,容易发现要求前缀和,顺便推推式子写个杜教筛就好了。

    C. 小 H 爱染色

    容易发现答案是方案数乘对应的多项式,其中方案数是组合数减组合数的形式。

    因为组合数中选的个数$m$并不大,可以发现这个组合数实际上是$m$次多项式的形式。

    要求的是组合数的平方卷积给定的系数,所以这个玩意将是$3m+1$次多项式的形式。

    所以可以通过$NTT$优化插值处理出一些$F$的取值,再通过$F$的取值卷积组合数处理出一些$ans$的取值。

    之后直接插值出$ans_n$就可以了。

    这样做的复杂度是对的,然而常数很大所以要疯狂卡常才能通过。

    一个较好的优化的方法是构造一个奇怪的函数(使组合数与插值点有关),并且保证在想要插值的点的取值相同。

    这个方法就很妙,它把原式中很难维护的卷积$ans$式,变成了一个可以递推的简单$ans$式,于是可以线性处理。

  • 相关阅读:
    Bootstrap 网页1
    Bootstrap 网页实例
    Bootstrap 警告框
    Bootstrap 表格
    Bootstrap 小功能
    【BZOJ1706】[usaco2007 Nov]relays 奶牛接力跑 矩阵乘法
    【BZOJ3669】[Noi2014]魔法森林 LCT
    【BZOJ2049,2631,3282,1180】LCT模板四连A
    【BZOJ4071】[Apio2015]巴邻旁之桥 Treap
    【BZOJ1009】[HNOI2008]GT考试 next数组+矩阵乘法
  • 原文地址:https://www.cnblogs.com/skyh/p/12178212.html
Copyright © 2011-2022 走看看