BZOJ1702。[Usaco2007月]ゴールドバランスラインナップのバランスキュー

ポータル

式沈静化を書き出すために、開始することは不可能と思われます。

の要件を満たすために区間$ [I、J] $、条件:

$和[I] [1] -sum [J-1] [1] =和[I] [2] -sum [J-1] [2] $

$和[I] [1] -sum [J-1] [1] =和[I] [3] -sum [J-1] [3] $

...

$和[I] [1] -sum [J-1] [1] =和[I] [K] -sum [J-1] [k]は$

$和[i]は[J] $ $ $ $間隔の特性の中に$ [1、i]の数を表し、Jが表示されます

同じラベルの下に一緒に入れました:

$和[J-1] [2] -sum [J-1] [1] =和[I] [2] -sum [I] [1] $

$和[J-1] [3] -sum [J-1] [1] =和[I] [3] -sum [I] [1] $

...

$和[J-1] [K] -sum [J-1] [1] =和[I] [K] -sum [I] [K] $

$和限り、満足が見つかりました[I] [P] -sum [i]の[1] [1、k]は$でのp \ forallを合計[J] [P] -sum [J] [1]、\を= 

直接ライン上の$マップ$メンテナンスに従事だから、私はああ、そう直接列挙裁判官のような構造を提唱し、状態$ハッシュ$が安定していないと感じ

プレフィックスとそうは$ 0 $が$地図$に参加置くことを忘れないことに注意してください!

#include <iostreamの> 
する#include <cstdioを> 
する#include <アルゴリズム> 
の#include <CStringの> 
する#include <cmath> 
の#include <地図>
 使用して 名前空間STD。
typedefの長い 長いLL。
インラインint型リード()
{ 
    int型のx = 0、F = 1チャー CH = GETCHAR()。
    一方、(CH < ' 0 ' || CH> ' 9 '){ 場合(CH == ' - ')、F = -1 ; CH = GETCHAR()。}
     一方、(CH> = ' 0 ' && CH <= ' 9 '){X =(X << 1)+(X << 3)+(CH ^ 48)。CH = GETCHAR()。}
     戻りのx *のF。
} 
のconst  int型 N = 1E5 + 7 INTのN、K、ANS。
構造体DAT {
     INT [ 31 ]。
    DAT(){memsetの(0はsizeof (a)参照)。} 
    インラインDAT F()
    { 
        DAT RES。
        以下のためのINT i = 1 ; iが= Kを<; iは++)res.aは[I] = [I] -a [ 1 ]。
        リターンのres; 
    } 
    インラインブール 演算子 <(CONSTの DAT&TMP)のconst {
         ためint型 i = 1 ; iは= Kを<; I ++の場合([I] = tmp.a [i]は!)を返す [I] < tmp.a [私];
        リターン 0 ; 
    } 
} C [N]、合計。
マップ <DAT、int型 > 融点;
INT )(主
{ 
    N =(読み取り)、Kは=リード()。int型;
    以下のためにint型 i = 1 ; iが<= N; iは++ 
    { =は)(読み取ります。
        INT J = 1 ; J <K = A >> = 1 C [I] .A [J] = A&、J ++)1 
    } 
    MP [sum.F()] = 1 以下のためにint型 i = 1 ; iが<= N; iは++ 
    { 
        ためのint型 J = 1 ; J <= K; J ++)sum.a [J] + = C [i]は.A [J]。
        DAT P = sum.F()。
        もし(MP [P])ANS = MAX(ANS、I-(MP [P] - 1 ))。
        他の MP [P] = I + 1 
    } 
    のprintf(" %d個の\ n " 、ANS)。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/LLTYYC/p/11408401.html