zoukankan      html  css  js  c++  java
  • 思维题练习专场-数学篇

    转载请注明地址:http://www.cnblogs.com/LadyLex/p/8885799.html

    太可怕了终于还是来做数学了……

    之前只是看过一点点反演相关的东西

    之前的总结:杜教筛 反演 

    提升的目标是思维,尤其是找到关键性质作为突破口的能力。

    不可能找到一种解决所有问题的通式,尤其是在数学这里……所以培养观察分析关键性质的能力就尤为重要

    这篇博客也将重点记录每道题的突破关键点……希望自己在2天时间里能有所提高……

    一,UOJ#62

      这道题是反演套反演套反演233333

      这题的经验:

      首先,反演的过程中不一定要出现$mu$,我们可以直接用for循环$O(nln_{n})$处理。

      所以不能被$mu$局限住思维,而要观察两个函数之间的相互关系

      第二,在遇到一个形如$f(gcd(i,j))$不好化开的时候,我们有这样一种思路:

      寻找/构造一个新函数$g(x)$,使得$f(n)=sum_{d|n}g(d)$

      这样的话,我们可以把$f(gcd(i,j))$的限制变成$sum_{d|i,d|j}g(d)$

      这样也许就能找到新的突破口,比如我们可以把$d|i$和$d|j$这两个条件拆开利用,或者改变枚举顺序……之类的

      第三,数论和线性代数之间也是有密切联系的。之前一直没有注意到这一点

      比如我们的反演过程其实可以表示为乘一个逆矩阵

      但是由于莫比乌斯反演的矩阵比较特殊,所以我们能有方便的做法。

      此外,此题也有用线性代数理解的方法:我们依然使用上面那个$g$函数,定义下面三个矩阵:

      $A_{ij}=[j|i]$,$B_{ij}=[i==j]g(i)$,$C_{ij}=[i|j]$,手推一下可以发现$f=A*B*C$,

      这里说一下观察到的一个小性质

      如果我们给一个矩阵A乘一个只有对角线上有元素的矩阵B,那么效果相当于给第i行每个

      很棒的一点是这三个矩阵的逆都是可以求的,那么我们就获得了$O(n^2)$直接算逆的做法

      最后推式子优化也可以做到$O(nlog_{n})$

      (不过我个人感觉还是上面三次反演好理解)

      *我们具体说一下莫反的线性代数形式

      我们知道,$sum_{d|n} mu(d) == [n==1]$

      那么变一下形,就会有$[m|n] sum_{d|frac{n}{m}}mu(d)==[frac{n}{m}==1]==[n==m]$

      如果我们把$n$和$m$看成下标,上面这个就是一个单位矩阵

      接着,我们枚举$c=m*d$,给原式继续变形,则有:

      $ sum_{c} [c|n][m|c]mu(frac{c}{m})$

      现在,我们找两个矩阵A和B,使得$A_{cn}==[c|n]$,$B_{mc}==[m|c]mu(frac{c}{m})$

      那么会有$BA==I$,这里$I$为单位矩阵

      从上面$f$和$g$的定义我们又知道$f=g*A$

      两边同乘$B$,那么$f*B=g$,你会发现这也就是莫比乌斯反演的那个式子

    后来又看了看vfk老师的ppt

    发现一句很棒的话,这种用反演把二元限制关系拆成独立的思想很不错

    体现有fwt,dft,fmt,以及普通的莫比乌斯反演等等

    二,loj2513

    md傻逼高斯消元有80分部分分?

    边界判错了能有20分,真是感动

    然后看了一眼徐明宽老师的标程,一眼发现一个叫gauss的函数???

    那我还是自己想吧,这什么牛逼题啊

    然后把矩阵输出了出来

    发现是个下三角矩阵

    md那我还n^3个jb啊,这样直接n^2消元就行了

    然后这道水题就做完了,可是我却打了一上午这个题

    怎么回事?回忆一下,我一开始想了不能过数据的统计方式,加和然后除以总的方案数

    打了一个半小时才打完裸消元,然后交上去,发现不对

    然后才改变了计算方式,然后又调了一个多小时才发现那个边界

    然后拿到70分之后发现了性质……

    …………可能我与出题人心灵不相通吧……

    不过下次做题的时候要先考虑好所有的式子和边界情况,

    边打边想很容易漏情况

    这两天玩高斯消元发现了新思路:观察式子/矩阵,可以得到$O(n^{2})$甚至$O(n)$的消元

    其实就是手动枚举代替for循环233333


    这里是分割线,这次我效率好低啊……只做了这一点题……

    毒瘤之间的交流

    接下来就是持续一上午的讲题环节

    由于自己是个傻逼,事后才发现有很多精彩的部分都再自己走神的时候错过了

    悟以往之不鉴,知来者之可追……以后要提高效率,不能让自己失望啊……

    感觉前几天做题的时候和别人讨论的时候效率极其低下

    以后在做题的时候要先避免讨论啊……感觉自己效率低好有负罪感啊……对不起自己的目标啊……

    加油加油!

    那么……来看一看这次讲的题目

    由于多项式部分听的比较认真就先说一下多项式吧……

    首先这次我终于解决了一个问题:这些XXT是怎么构造出来的

    感谢RYF的讲解,虽然我们两个坐到一起讨论总是会变得效率低下2333333

    现在我们想要一个复杂度优于n^2的变换,满足有正变换和逆变换(变换矩阵可逆)

    怎么求解呢?由于我们变换都是“正变换-->对应位相乘-->逆变换”这样一个过程

    我们可以把目标式和计算式两个正变换写在等号两边,化一下式子,你会发现你构造的变换矩阵应该满足

    $T_{k,i} * T_{l,i} = T_{k#l,i}$

    这样就特别棒了,比如,我们手解个方程可以解出$fwt$的矩阵

    此外,如果下标系统满足循环律的话我们还可以利用单位根构造一下,比如$dft$

    其实这些变换都是有一个if语句的限制关系摆在那里让我们很难处理

    一般限制有mod关系,相等的关系,位运算的关系……

    然后,我们需要结合这个语句寻找把限制转化的方法

    比如,循环卷积的if是mod,我们利用单位复数根求和的特判找到拆开mod的方法

    fwt的或/与变换,我们把p|q==r变成p属于r&&q属于r来拆限制,然后用高维前缀和做变换

    反演中的gcd我们寻找d|i && d|j 来拆限制

    二项式反演,我们用$(1-1)^n$的展开式代替$n==m$,然后做反演等等

    感觉自己对反演以及变换有了新的认识……

    另外似乎学到了一个新技巧,好几道题都用了这个变形:$ik=((i+k)^2-i^2-k^2)/2$

    另外一种形式是 $ik=((i+k)(i+k-1)-i(i-1)-k(k-1))/2$,这种写法多见于任意长度循环卷积中

    不过这个科技我只是略微听了一下,没有实际实现过……待补坑

    这样,我们如果在卷鸡的时候有一项的指数有ik堆在一起的情况,

    用这个技巧就可以在卷的时候把指数中同时存在$ik$的指数拆开,然后就可以做了

    以及lc的题对于差分的应用真的很6啊……

    个人感觉自己一直不会用差分……就很虚弱

    我们差分的用处有很多,比如维护信息的时候可以把区间加改成单点加,区间加等差数列改成区间加……等等

    还可以用于推式子……如果表达式中有难处理的东西也许可以差分掉

    裂项相消法

    错位相减法

    然后还可以通过差分观察性质,比如之前那个置换的题,发现转移式子相当于交换差分的那个

    还可以通过差分处理一些有单调性的题目,比如维护后缀最大值的差分数组的那题

    但是……说了这么多要是真碰到题目还是不会用23333

    反演的部分有一个不错的题目是srs的bzoj2627:JZPKIL

    这题也挺不错的……我没想到的一个地方是分解质因子

    具体来说,由于n很大,我们有意识的把有积性的函数都归到一起,设他们为函数$F$

    然后枚举n的质因子,那么$f(n)=prod(f(pi^ki))$

    而由于这是反演题所以他有个$mu$……在质因子只有一种的情况下,mu只有2种可能的情况有值:0次方的1和1次方的-1

    然后我们的式子就被简化了,就可做啦!

    在式子中有mu的时候这种分解质因子的处理方法似乎很经典

    一个人的数论和循环之美两道经典题目中都有这种处理方式的应用

    另外,yzh的题目也很不错

    个人只能想出30分的部分分,并没有推导更多的式子

    其实换成枚举gcd就可以想出分数更高的算法?

    正解是一个……$O(n^{frac{3}{7}})$的算法,目前没有研究明白

    看起来,一些数论题目(尤其是这些毒瘤反演)的复杂度分析也是很重要的一环

    积分是常用的姿势

    如果复杂度分析不好,可能会自己打错解,也可能不敢打正解

    不过现在考试似乎不会特别仔细的算时空复杂度

    以后要注意这一点,避免因为这个浪费时间

    接着是一些概率和博弈的题目

    wq选的题目是一道很不错的博弈论(bzoj4220)

    之前我们说的博弈论都是sg函数等等模型或者结论的东西

    但是事实证明,高端玩家们都不玩结论题了23333

    这些博弈论题目更加注重“博弈分析”,即利用人类智慧,分析游戏的过程,考虑什么时候游戏决策会很优秀

    真是烧脑啊……分析这个东西非常的考察思维啊……

    对于本题来说,我们首先可以分析两个玩家的决策,写出一个收益矩阵

    然后……我们会意识到,如果每个人都使用单一策略,因为两人都是绝顶聪明的,所以两个人就永远不会确定一个稳定的策略

    然后我们就会意识到我们应该找一个带概率的稳定策略,使得两个人都无法通过调整策略使得自己收益增加,而对手不动

    虽然这就是纳什均衡的模型吧……但是这个分析在不知道这个模型的情况下也是可以做出来的

    在这之后,我们求出那个平衡点的概率,这样我们就获得了两个人的策略,然后就可以继续分析了……

    这种博弈分析的题目我之前根本没见过,分析问题的思维也没有特意去训练过

    有时间的话,挑两道好题训练一下吧,也许可以和wq要两道

    接着,ltr的题目似乎是那种思维难度很高代码很短的题目?

    课前看到这题就没有思路……结果讲的时候也没有听懂,一点思路都没有

    所以GG了……

    然后……感觉很内疚的是在听wxhao的概率数据结构(loj2263),

    以及wxhui的量子态fwt(uoj328)的时候我走神了……

    所以基本处于懵X状态,没能从题目上面收获很多

    感觉亏死了啊啊啊……这次有3道好题都没有学习到,不知道还有没有时间补题……

    最后是总共的题表,按讲课顺序2333

    uoj62 zzh

    bzoj2627 srs

    loj509 yzh

    原创题+cf901E lc

    loj6271/548 ryf

    uoj328 wxhui

    bzoj4220 wq

    loj552 ltr

    loj2263 wxhao

    bzoj4820 wzz

    再总结一下数学专项的考试题?

    现在看来其实大部分都是上面写过的东西?

    明明是考了之后才写的

    有一个题目我觉得特别新奇,就是那个找循环节并且利用了BSGS的题

    感觉自己做数学题的时候最不会想到的就是循环节了……虚弱……

    并且用BSGS找循环节我也是没有想过的,单知道可以求A^x=B (mod C)

    但是其实那个也是循环节啊……总之自己还是没有这个意识

    如果有循环节的话我们就可以减少原本按题目定义是无穷的计算量

    之前有一个题意是做无限次fwt的题也可以用找循环节做

    自己找循环节的意识基本为0……考试基本想不起来

    要培养一下这个意识……

    然后有一个奇形怪状的gauss题目

    利用了一大波期望的线性性

    那个题思维难度也挺高的,很nb

    最后的总结:

    这次数学专题的学习似乎就结束了……

    感觉自己还是很虚,见到题还是不会做……

    但是这次学到了不少新的思路,见到了不少新题……

    接下来的话,大概会和最近一样找一些专题来做

    发现有的数据结构题也挺妙的,数据结构不一定都是毒瘤题

    以后找一些不错的数据结构题和制胡窜题目当作专题吧

    以上。

  • 相关阅读:
    sae-xhprof调试性能
    VC++常用函数
    C++资料收集&整理
    C++宽窄字符串转换
    #MySQL for Python(MySQLdb) Note
    VC++ ADO相关
    MFC各种控件的常见操作(逐步添加中......)
    关于Sql注入的那些事
    Python中socket经ssl加密后server开多线程
    网络编程
  • 原文地址:https://www.cnblogs.com/LadyLex/p/8885799.html
Copyright © 2011-2022 走看看