• 【OI备忘录】trick汇总帖


    OI中的那些实用的小trick

    在OI中,我们时常会用到一些小技巧,无论是代码方面还是数学方面抑或是卡常,都有很多不错的小技巧。

    鄙人不才,往往没办法想出来,于是就有了这篇汇总帖~

    如有疏漏,还请dalao指教!


    1. 结论:(gcd(F[n],F[m])=F[gcd(n,m)]),其中F为斐波那契数列

      (quad)证明:

        我们设(n<m)(F[n]=a)(F[n+1]=b)

        则(F[n+2]=a+b,F[n+3]=a+2b,…F[m]=F[m-n-1]a+F[m-n]b)

        (ecause quad F[n]=a,F[n+1]=b,F[m]=F[m-n-1]a+F[m-n]b)

        ( herefore quad F[m]=F[m-n-1]*F[n]+F[m-n]*F[n+1])

        又(ecause quad gcd(F[n],F[m])=gcd(F[n],F[m-n-1])

        而(F[n]|F[m-n-1])

        ( herefore quad gcd(F[n],F[m])=gcd(F[n],F[m-n])

        引理:(gcd(F[n],F[n+1])=1)

         证:由欧几里德定理知

           (gcd(F[n],F[n+1])=gcd(F[n],F[n+1]-F[n])=gcd(F[n],F[n-1]))

                  (=gcd(F[n-2],F[n-1]))

                  (…………)

                  (=gcd(F[1],F[2])=1)

          $ herefore quad gcd(F[n],F[n+1])=1$

        由引理知:

        (F[n],F[n+1])互质

        而(gcd(F[n],F[m])=gcd(F[n],F[m-n]*F[n+1]))

        ( herefore quad gcd(F[n],F[m])=gcd(F[n],F[m-n]))

        即(gcd(F[n],F[m])=gcd(F[n],F[m;mod;n]))

        继续递归,将(m1=m;mod;n),则(gcd(F[n],F[m])=gcd(F[n;mod;m1],F[m1]))

        (……)

        不难发现,整个递归过程其实就是在求解(gcd(n,m))

        最后递归到出现(F[0])时,此时的(F[n])就是所求gcd。

        ( herefore quad gcd(F[n],F[m])=F[gcd(n,m)])

    2. 分层图

      (quad)分层图是一种常见的图论技巧。常用于图中存在某些限制的情况。具体而言,就是建图时将图按照不同的限制条件分层几层,其间有一些有向边连接,这些有向边一般代表着当前限制条件的状态的改变。这个技巧可以省掉很多特判或者别的的麻烦事,你只用在建好的图上做一般操作就可以了。

    不间断更新~

  • 相关阅读:
    Bellman-Ford算法
    POJ 1990 MooFest
    POJ3067:Japan(树状数组求逆序对)
    树状数组求逆序对
    树状数组
    Is It A Tree?(hdu1325)
    强连通图 Tarjan算法
    UVALive
    UVALive
    Problem Statement
  • 原文地址:https://www.cnblogs.com/DarkValkyrie/p/11439796.html
Copyright © 2020-2023  润新知