トピックポータル
分析:
この質問は不滅である、我々は解決策と高いバージョン2333ソリューションの低装備したバージョンを提供します
低バージョン:
まず、我々は、このようなA式を知っています。。。(高いバージョンを証明するために)
文字列は、S場合請求S [1]、[I] = S [N - I + 1、n]のときに呼び出されるS [1、i]はSの境界として
ANS [N] =シグマ^ M(S [1、i]のは、S境界である)は、i
ああ。。。
あなたがこれをしたら、我々はKMPまたはハッシュ解決することができます
しかし、答えを得るためにハッシュはSのみを扱うことができる、と答えは、すべてのSプレフィックスを取り扱うKMP行うことができます
ここではKMPと(ハッシュは非常に単純な(霧)を信じています)
Fを設定し、我々はそう[i]は答えに再帰のi番目のビットであります
私たちは、失敗配列に最初のターン
次に、セットSの境界[1、i]は、S [1、i]は、それ自体に加えS [1、i]は[失敗]は、境界を設定されています
だから、再帰的に来ます
F [I] = F [i]が[失敗] + M ^ I
Nはカウントに答えています
高配版:
まず第一に、我々は、式ビルダーの機能を知っておく必要があります。
F(I)=シグマ(I = 0 ... +∞)愛* X ^ I
私たちは、イベントのためのコストが発生する確率は、私は愛であるから、確率生成関数生成関数を定義します。
その後、我々は知ることができます:
F(1)= 1
xが1をとることと等価である場合、F(1)確率を表し、1の値を持つすべてのケースで明らかに正しい、イベント自体であります
その後、我々はEの予想コストを考える(X)
E(X)=シグマ(I = 0 ... +∞)愛* I
私は貢献を行うときにはゼロであるので、私は1から開始することができますので
その後、我々は、F(x)の導関数を持って、面白いものがあります
F(X)=シグマ(I = 1 ... +∞)愛* I * X ^(I - 1)
私たちは、その後、「(1)=シグマ(I = 1 ... +∞)愛* IがFを取ります
そして、E(x)の比較は、我々はそれを見つけるために驚きました。
E(X)= F '(1)
これは偶然では?または必然的なのいくつかの種類?
また、これは可能性を説明し、期待は必ずしもリンクされています
我々はポイントを取得して
関数F(x)は、iの長さの端の確率を表して設けられ、G(x)はiが終わっていない確率の長さを表します。
その後、我々はこの式を得ます:
F(X)+ G(x)= 1 + G(X)* X
すべての考慮、実際には、全体の再帰的なプロセスは、あなたが私をしている - は終わりの確率、あなたがポジションを終了し、私は「I」と確率で終わっていないということです
この式は、型と呼ばれる1
その後、我々は解決することを検討してください。。。
フォースプラス(1 / MX)我々は^ G(X)になりますnは文字列の最後になります、文字列がボーダーSの前にそこかもしれない文字列ので、しかし、途中で終了することができます
私たちは、国境の長さを列挙します
最初のボーダーSかどうかAI = 0又は1がSを表し、[1、i]は、を定義します
だから、この式を得ることができます。。。
G(X)*(1 / M * X)^ N =シグマ* F(x)は* Al(iは1 = ... N)(1 / M * X)^(N - I)
非常に正しい2333を分析(ルアン)のこの式が、(HU)の感覚を言うのは難しいです
のみDarknessesシンプル志向、私は約知っていません
この式は、型と呼ばれる2
その後、我々は大きな♂式をプッシュ
まず、式の誘導体
F '(X)+ G'(x)= G(X)+ G '(x)* X
要件F「(1)ああ。。。
それ2333への直接アクセス
その後に驚き
F '(1)= G(1)
そして、2回目の試行を取ります
G(1)*(1 / M)* N =シグマ(iは= 1 ... n)およびF *(1)*(1 / M)*(N - I)
F(1)= 1、我々は(1 / m)を有する^ nは最後の添加以来
G(1)=シグマ(I 1 = ... n)およびI * M *
従って回答[N] = E(X)= F「(1)= G(1)=シグマ(S [1、i]は、境界Sへ)M ^ I
許可証を取得します。。。
ハッハッハ。。。
本当に不滅の関数を生成します。。。
数学あまりにも料理2333
書式#include <cstdioを> する#include <アルゴリズム> 書式#include <ベクトル> の#include <cmath> の#include <CStringの> の#include < 文字列 > の#include <マップ> 書式#include <キュー> の#include <iostreamの> に#define MAXN 1000005 #定義 MOD 1000000007を使用して名前空間はstdを、 インラインINT GetIntで() { int型 NUM = 0、フラグ= 1。char型のC; 一方、((C = GETCHAR())< ' 0 ' || C> ' 9 ')であれば(C == ' - ')フラグ= - 1 。 一方、(C> = ' 0 ' && C <= ' 9 ')NUM = NUM * 10 + C- 48、C = GETCHAR()。 リターン NUM * フラグ。 } int型N、M。 長い 長い[MAXN]、PW [MAXN]。 長い 長いANS; 長い 長い[MAXN]、F [MAXN]失敗。 INT メイン() { M = GetIntで()、N = GetIntで()、F [ 0] = 1 。 以下のために(INT iが= 1 ; I <= N; I ++)[I] = GetIntで()、F [I] = F [I- 1 ] * m個%MOD。 失敗[ 0 ] = - 1 。 以下のために(INT iが= 2 ; I <= N; I ++ ) { ため(INT J =失敗[I- 1 ]; J> = 0 ; j個の=は、[j]を失敗) であれば([I] == A [j個の+ 1 ]){失敗[I] = J + 1、(F [I] + = F [j + 1 ])%= MOD。休憩;} } のために(int型iは= 1 ; I <= N; I ++)のprintf(" %のLLD \ n " 、F [I])。 }
ACコードは、ああ、それは直接的な答えを出力することができないすべてのプレフィックスは、S 2333タイプ
コードは短い、それは本当に長い2333を証明しました