HDU 6470:カウント(行列高速電力)

カウント

時間制限:6000/3000 MS(Javaの/その他)メモリの制限:65536分の65536 K(Javaの/その他)
の合計提出(S):1187受理提出(S):433

問題の説明

。ファーマージョンのn-牛
:デイ牛は特別な方法で牛の数をカウントする
牛1の最初の数、二牛の第2、第三牛の後、場合牛の現在の頭はその後数の2倍の彼の最初のn-2牛プラスのn-1牛の番号に加えてその数のための彼らの現在のn乗の数で、nは。
今ファーマージョンはそれは限り、あなたの出力回答を法として123456789のため、答えは素晴らしいものだと推定され、最初の数nは牛の数で、知りたいです。

入力

第一の入力線Tは、Tは、サンプルの集合を表し有する
(N> = 3)T線以下、各ラインは正の整数N、N-牛を有する
場合、T = 10 ^ 4、N <= 10 ^ 18

出力

総Tライン、各ラインは、答えを聞いて、正の整数を表し、

サンプル入力

5
3
6
9
12
15

サンプル出力

31
700
7486
64651
527023

 考え

再帰的な式を考える:F [I] = F [I-1] + 2 * F [I-2] + N ^ 3

マトリックスを構築することができます。

 

マトリックスソルバーは、高速電力を使用することができます

コード

1つの#include <ビット/ STDC ++ H>
 2  の#defineっ長い長い
 3つ の#define ULLのunsigned long長い
 4つ の#define MS(B)のmemset(A、B、はsizeof(a))は
 5  CONST  INT INF = 0x3f3f3f3f 6  CONST LL INF = 0x3f3f3f3f3f3f3f3f 7  のconst  int型 MAXN = 1E6 + 10 8  CONSTの LLのMOD = 123456789 9  のconst  int型 MAXM = 1E3 + 10 10  使って 名前空間はstdを、
11 構造体マート
 12  {
 13の      LL M [ 6 ] [ 6 ]。
14  }手段と
15  マートMULT(マートX、Yマート)
 16  {
 17の     マートANS。
18      のためには、int型 i = 0 ; iは< 6 ; iは++ 19      {
 20          のためのint型 J = 0 ; J < 6 ; J ++ 21          {
 22              ans.m [I] [J] = 0 ;
23              のためのint型K = 0 ; K < 6あり、k ++ 24              {
 25                  ans.m [I] [J] + = XM [I] [K] * YM [K] [J]。
26                  ans.m [I] [J]%= MOD。
27              }
 28          }
 29      }
 30の     リターンANS。
31  }
 32  ボイドのinit()
 33  {
 34      のためにint型 i = 0 ; iは< 6 ; I ++ 35          unit.m [i]は[I] = 1 36  }
 37 マートqpow(マートA、LLのB)
 38  {
 39      のinit();
40の      マートANS = 手段と
41      一方、(B)
 42      {
 43          であれば(B&1 44の              ANS = MULT(ANS、A)。
45          = MULT(A)。
46          B >> = 1 47      }
 48の     リターンANS。
49  }
 50  のLL slove(LLのN)
 51  {
 52      マートA、B。
53件     のint RES [ 6 ] [ 6] = {
 54          121331 55          100000 56          001331 57          000121 58          000011 59          000001 60      }。
61      のためにint型 I = 0 ; iが< 6 ; I ++ 62          のためのINT J = 0 ; J < 6 ; J ++ 63              AM [I] [J] = 1LL * RES [I] [J]。
64の 
65      BM [ 0 ] [ 0 ] = 2 ;
66     BM [ 1 ] [ 0 ] = 1 67の      BM [ 2 ] [ 0 ] = 8 68の      BM [ 3 ] [ 0 ] = 4 69の      BM [ 4 ] [ 0 ] = 2 ;
70の      BM [ 5 ] [ 0 ] = 1 71      マートC = MULT(qpow(N- 2 )、B)。
72      リターン CM [ 0 ] [ 0 ]%MOD。
73  }
74  INTメイン(int型 ARGC、チャー CONST * ARGV [])
 75  {
 76      #ifndefのONLINE_JUDGE
 77          freopenは(" /home/wzy/in.txt "" R " 、STDIN)。
78          freopenは(" /home/wzy/out.txt "" W " 、STDOUT)。
79          にsrand((符号なし整数)時間(NULL))。
80      #endifの
81      のint T。
82      のscanf(" %dの"& T);
 83      LL N、
 84      ながら(t-- 85      {
 86          のscanf(" %のLLD "& n)は、
 87          であれば(N == 1 || N == 2 88              のprintf(" % LLDする\ n "N);
 89 90              のprintf(" %LLDする\ n "slove(N));
 91     }
 92     #ifndefのONLINE_JUDGE
 93          CERR << " 時間経過しました。         
  " << 1.0 *クロック()/ CLOCKS_PER_SEC << " 秒。 << ENDL;
 94      #endifの
95      リターン 0 ;
 96 }

 

おすすめ

転載: www.cnblogs.com/Friends-A/p/11373177.html