あなたは長さNのシーケンスを与える連続配列、プロモーター配列と、全体のKができるのであれば、正の整数で
削除、そしてこのシーケンス、どのように多くの合法的な連続配列を含む、元の配列の合法的な需要、など?
長さ8の配列について、の場合にはK = 4:2、1、2、1、1、2、1、2。これは、サブシーケンスは、6に対する回答
位置1->位置8,2> 4,2-> 7,3-> 5,4> 6,5> 7です。
単純に数論のようなものを追加します。。。
私たちは、プレフィックスとストレージを使用します。(すなわち、1からx及び配列)
その後、我々は、k個の区間とで割り切れることができますを探しています、
S1 <S2があります
S1≡S2(モッズk)を満足するように
とよると合同
(S1-S2)≡0(MOD K)
すなわち、S1とS2の金型K Iの等しい数が、kが割り切れる組成範囲とすることができる場合、です。
そして、金型は(高校ではありません接続方法、その上に小学校...)を組み合わせ、その後、ソート、Kの前に付けることができます
あるいは一緒にバレルと、ANS + = T *(T-1)/ 2
すべて単独で0 ANSの残りの部分を結合するために取る必要があり、彼は非常に特別なものだったことを覚えておいてください
#include <ビット/ STDC ++ H> 使用して 名前空間STDを、 INTの和[ 50500 ]、K、T、N。 INT メイン(){ scanf関数(" %のD "、&T)。 用(INT O = 1 ; 0 <= T、O ++ ){ scanf関数(" %d個の%のD "、&K&N) 和[ 0 ] = 0 。 以下のために(int型 i = 1 ; iが<= N; iが++ ){ scanf関数(" %dを"&和[I])。 和[I] =(SUM [I] +和[I- 1 ])%K。 } ソート(和 + 1、和+ 1個の + N)。 int型 TT = 0 ; 和[ 0 ] = - 10086 。 int型 ANS = 0 ; 以下のために(int型 i = 1 ; iは= N <; iは++ ){ 場合(SUM [I] == 0)ANS ++ 。 もし(SUM [I] ==和[I- 1 ]){ TT ++ 。 ANS + =TT; } そう TT = 0 。 } のprintf(" %d個の\ n " 、ANS)。 } 戻り 0 。 }