[Jizhongアナログ2019年8月1日] []列JZOJ2644

トピックリンク

質問の意味:

  $ N $ $ \ {a_iを\} $、「法的」サブ範囲の定義、および$ K $で割り切れることができるの正の整数の長さの配列です。「法的」のサブセクションの数は、元の配列を含む探していますか?

  $ T $のデータセットの合計。

  20 \ $ 1 \ T \クワッド1 \ N、5 * 10 ^ 4 \ \カッド1 \ K、10 ^ 6 \ \ 10 ^ 9 $ \ a_iを\クワッド1

 

分析:

  一見、予期せぬ$ O(N \、LOGN)$のアプローチでは\ simのはO(n ^ 2)の約$ O(n)を書き込むための$暴力的なこと。

  ここでは$ O(n)と$接頭辞と前処理時間、$ O(N ^ 2)$は、列挙エンドポイントの時間間隔です。たびに$ ANS ++ $の「法的」のサブセクションを見つけました。

  (MOD \ $$プレ[R] -pre [L-1] = \和\限界^ {R} _ {i = L} a_iを\は当0 \:我々はこの式に基づいているか、検討、K)$$

  (MOD \、K)$$;、明確当量事前[L-1] \ \プレ[R]を$$について、それを適応させます

  ショックで病気を死ぬと、私はラインを参照してくださいこの質問オープンバレルをアップ座って!間隔任意の二箇所プレフィックス及びエンドポイントが「合法」からなるので、我々は、各金型$ Kの$残りのバレルが開かれるように$ K $以上でダイがカウントされ、回答を求め使用組み合わせの数。

  時間複雑性O(K)、O(N + K)の空間複雑。

 

実装(100):

 

#include <iostreamの> 
する#include <cstdioを> 
する#include <CStringの> 
する#include <cmath> 
の#include <アルゴリズム>
 の#define ILインライン
 使用 名前空間STDを、
const  int型 N = 5E4;
const  int型 K = 1E6; 
typedefの長い 長いLL。

    int型N、T。
    LL kを、[N + 3 ]、S [N + 3 ]、C [N + 3 ]、ANS。
    INT CNT [K + 3 ]。

INT メイン(){ 
    C [ 0 ] = cを[1 ] = 0 ; C [ 2 ] = 1 int型 I = 3私は++; iが<= N 
        C [i]は [I-= Cを1 ] + I- 1 

    scanf関数(" %のD "、&T)。
    一方、(T-- ){ 
        scanf関数(" %のLLD%dの"、&​​K&N)
        以下のためにint型私= 1 ; iが<= N; iが++ 
            のscanf(" %のLLD "、および[I])。
        
        memset(CNT、0はsizeof CNT)。
        S [ 0 ] = 0 ; CNT [ 0 ] = 1 ;
        以下のためにint型 i = 1 ; iがn = <; iは++ ){ 
            S [i]は =(S [I- 1 ] + [I])%K。
            CNT [S [I]] ++ ; 
            
        } 
        
        ANS = 0 int型 I = 0 ; I <K iが++ 
            ANS + = C [CNT [i]は]。
        
        printf("%LLD \ n " 、ANS); 
        
    } 

    戻り 0 ; 

}
コードの表示

 

 

要約:

カウント、我々は通常、法律を見つけ、変形方程式の原則を置くことができ、$ ANS ++進化$から暴力的なことができます。

 

おすすめ

転載: www.cnblogs.com/Hansue/p/11310258.html