彼は少しクラッシュ、突然死亡した、と比較的自閉症の心..
LINK:幸せな 私は確かに書き出すことができますが、私は打ち上げを折りたたむので気にしなかった、一度1。
求$ T_N = \ displaystyle \ sum_ {i = 0} ^ {n}はF_n $其中$のFn = \ displaystyle \ sum_ {i = 0} ^ {N}のf_i \回F_ {NI} $
$ F $フィボナッチ列である$ F_0 = 1、F_1 = 1 $ ... $ F_n要件$ N <= 1E18
むしろ、明白なアイデアは、TN簡素化を記述し続けることで、最終的に接頭辞の形を見つけ、その後、Oに見つかった(n)が計算されます。
ごみ結果のわずか70分のようになります。
// の#include <ビット/ STDC ++。H> の#include <iomanip> の#include <iostreamの> する#include <cstdioを> する#include <CStringの> する#include < ストリング > の#include <キュー> の#include <両端キュー> する#include <cmath > の#include <CTIME> の#include <cstdlib> の#include <スタック> の#include <アルゴリズム> の#include <ベクトル> の#include <CCTYPE> の#include <ユーティリティ> の#include < 設定 > 書式#include <ビットセット> の#include<地図> の#define INF十億十 の#defineっ長い長 の#define MP(x、y)はmake_pair(X、Y) の#define未符号なし の#defineダブルDB の#define EPS 1E-5 の#define MOD 998244353 使用して 名前空間STDを、 チャー BUF [ 1 << 15 ]、* FS、* FT。 インラインチャーGETC() { リターン(FS ==フィート&&(FT =(FS = BUF)+関数fread(BUF、1、1 << 15、STDIN)、FS ==フィート))?0:* FS ++ ; } インラインLLリード() { LL X = 0、F = 1。チャー CH = GETC()。 一方、(CH < ' 0 ' || CH> ' 9 '){ 場合(CH == ' - ')、F = - 1 ; CH = GETC();} 一方(CH> = ' 0 ' && CH <= ' 9 '){X = X * 10 + CH- ' 0 ' ; CH = GETC();} 戻りのx *のF。 } CONST LL MAXN =1000010 ; LLのn; ANS LL、合計。 LL F [MAXN]。 署名されたメイン() { // freopenは( "1.in"、 "R"、STDIN)。 N = 読み取ります(); F [ 0 ] = 1 ; fは、[ 1 ] = 1 。 用(LL I = 2 [I] =([I-F、F; iは<= N I ++)1 ] + F [I- 2 ])%MOD。 もし(N <= 20000 ) { ため(LL i = 0 ; iが<= N; ++ I) { 用(LL jを= 0 ; J <= I; ++ j)は ANS=(ANS + F [j] * [IJ F)%MOD。 } のprintf(" %LLDする\ n " 、ANS)。 リターン 0 ; } 場合(N <= 1000000 )は、 { ため(int型 i = 0 ; iが<= N; ++ I)の合計=(和+ F [i])と%MOD。 以下のために(int型 i = 0 ; iは= N <; ++ I) { 合計 =((SUM-F [N-I + 1 ])+ MOD)%MOD。 ANS =(ANS + Fの[I] *和%MOD)%MOD。 } のprintf("LLD%\ N- "ANS); 戻り0 ; } //は、包含及び除外100点を考慮して、良好な自己閉鎖にない のprintf(" %のLLDの\のN- " ;、ANS) 戻り0 ; }
三重の合計にこの実際に反転した三角形が、その後の治療を放棄したので、私は2時間と考えられていた修正されていない見つけ最適化する方法を考えるように続けます。ない右思考の方向すぎ。
この式では$ F_n $ルック。単純に減少$ F_n = \ sum_ {i = 0} ^ {N-2}のf_i \回F_ {NI} + F_ {N-1} F_1 + f_nf_0 $