思维题练习专场-数学篇

Posted LadyLex

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了思维题练习专场-数学篇相关的知识,希望对你有一定的参考价值。

转载请注明地址: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

最后的总结:

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

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

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

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

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

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

以上。

以上是关于思维题练习专场-数学篇的主要内容,如果未能解决你的问题,请参考以下文章

程序员进阶之算法练习:LeetCode专场

程序员进阶之算法练习:LeetCode专场

思维训练题

好题收集 游戏(数学+思维)

51Nod 1003 阶乘后面0的数量(数学,思维题)

Bonetrousle HackerRank 数学 + 思维题