这次情况稍微好了点,但是还是各种写跪23333……不得不说,纪中的OIer数学推演能力好像都太好了点,就是讲的课很容易让人听不懂……
【T1】【JZOJ 3777】
这道题目是一类特殊图的最短路,这种题目一般是打表+找规律+证明(一般不会去想?)……讲的是对于一个格点图,对于点(i,j)定义权值为F(i,j)=F(i−1,j)+F(i,j−1),边界i=0或j=0时F(i,j)=1,同时在(i,j)与(i,j−1)、(i−1,j)间相应分别连两条零权值边,问(0,0)到(n,m)的最短路。
容易发现最短路就是沿着边走,不妨设n<m,那么最短路就是(0,0)−(0,m)−(n,m),因为从另一个方向的折线显然比它长。那么问题就变成了求m+∑i=1nF(i,m)。由于我们马上可以发现F(i,j)其实对应杨辉三角,进而对应组合数,所以上面那个式子=m+∑i=1nC(i+m−1,i。
怎样快速求呢?这里有两个思路:
思路一,注意到
那么我们得到
就可以很方便地用逆元直接推啦~
直接搞是O(nlgn),如果用线性推逆元(推到nm−−−√)就可以直接做到O(n),但是比较麻烦。
思路二,考虑到
这个可以直接算若干阶乘,然后全部阶乘完再做逆元,这样似乎比较快?而且还挺好写的,时间复杂度O(n+lgn)。
【T2】【JZOJ 3769】
题意是考虑一种特殊的斐波那契进制来表示数,即把数表示成每位权值分别为1,2,3,5,8...Fib(i)的向量a,使得这个
我们发现,满足最大的向量一定没有相邻的两个一,而且也不可能有大于一的数,前一个可以合并两个一,后一个可以分拆,比如2xi=xi−2+xi+1,这样向量都会更大。于是我们先定义一次迭代操作就是先把所有的大于一的数分拆,然后再统一合并相邻的非零数,接着听说跑个玄学次就能过了,我也不会证……不过还是有可能构造出数据的。隔壁zmz dalao认为跑lgn次就可以了,但是我也还是证不了,根据数据只用10+次。
【T3】【JZOJ3771】
对于这道题目,我们直接来讨论下满分算法。考虑到如果不算所有乘上了2i的数,那么第一个盒子里的数都是奇数。那么我们容易发现,第一个盒子里面的所有数实际上就是所有形式为a2mi的数,其中a都是奇数,结合标号条件,我们还需要