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。

      并不是很理解。

  • 相关阅读:
    python-学习 补充模块;面向对象程序设计
    python学习- 常用模块与re正则
    python-学习 协程函数 模块与包
    python-学习 初级atm小脚本、函数嵌套、装饰器、生成器、迭代器、三元表达式
    模拟登陆古诗文网
    正则表达式(括号)、[中括号]、{大括号}的区别
    MongoDB的基本操作
    语音合成以及语音识别
    flask中的CBV,flash,Flask-Session,WTForms
    Flask基础2 蓝图,实例化配置,app对象配置,特殊装饰器
  • 原文地址:https://www.cnblogs.com/hzoi-cbx/p/12178260.html
Copyright © 2011-2022 走看看