フィボナッチ(フィボナッチ)(法律のタイトル)

法律を見つけることです、私はそれぞれの子の父親と息子の差が離れて最大のfibonaccからであることを発見しました

それは証明可能です

F [i]は、現在の月のウサギの合計数を表し

F [I] = F [I-1] + F [I-2](F [I-2] F新生児は、である[I-1]古いです)

そして、セットの使い方について学びます

 

1の#include <iostreamの>
 2の#include <cstdioを>
 3の#include < ストリング >
 4の#include <アルゴリズム>
 5の#include <cmath>
 6の#include <ベクトル>
 7の#include <地図>
 8 <の#include 設定 >
 9#含む<CStringの>
 10  の#define MAXN 1000001
 11  の#define INT長い長い
 12  使って 名前空間STDを、
13  のint L [MAXN]、R [MAXN]。
14  セット < 整数 > V。
15  INTF [MAXN]。int型メートル。
16  ボイドset_work()
 17  {
 18      F [ 1 ] = 1 ; [F 2 ] = 2 19      v.insert([F 1 ]); v.insert(F [ 2 ])。
20      のためにint型 I = 3 ; iが= < 60 ; ++ i)が
 21      {
 22          F [I] = F [I- 1 ] + F [I- 2 ]。
23          v.insert(F [I])。
24      }
 25  }
 26  INT検索(INT X)
 27  {
 28      セット < 整数 > ::それをイテレータ。
29      は= v.lower_bound(X)を、
30      it-- 31      リターン * それ。
32  }
 33  INT LCA(int型のx、int型のY)
 34  {
 35      であれば(x == y)は戻りX。
36      であれば(X> Y)スワップ(X、Y)
37      であれば(X + 1 ==のY)戻り1LL。
38      セット< 整数 > SS。
39      ss.insert(X)。
40      一方(X =!1 41      {
 42          X- = 見つける(X) 
43          ss.insert(X)。    
44      }
 45      ながら(!Y = 1 46      {
 47          Y- = 見つける(Y)
48          であれば(!ss.count(Y)= 0 49          {
 50              リターンY。
51          }
 52      }
 53      リターン 1 54  }
 55  )(主符号付き
 56  {
 57      のscanf(" %のLLD "、&M)を、
58      のためには、int型 I = 1 ; I <= M; ++ I)
 59      {
 60          のscanf(" %のLLDの%のLLD "、&​​L [I]、およびR [I])。
61      }
 62      set_work()。
63      のためにint型 I = 1 ; I <= M ++ i)が
 64      {
 65           のprintf(" %のLLDする\ n "、LCA(L [i]は、R [I]))。
66      }
 67 }
コードの表示

 

おすすめ

転載: www.cnblogs.com/Wwb123/p/11299540.html