C.審査員マークスの考え方

C.審査員マークス

けれどもこのトピックは1600年ですが、まだ非常に考えて。

考えるのは少し難しいです。

それは、プレフィックスと認識し、関連の比較的高速起動する必要があります

X X + A1 X + A1 + A2のx + A1 + A2 + A3 ...

X +和= B

このXのM Bを満たすために見つけ、それはxが合理的であることを示しているのであれば、私たちは、それぞれのbのxを列挙することができます。

しかし、彼らはない虫をすれば、X = B-合計と同じの2を見つけることですので、デエンファシスのこの合計は、なぜ、それの重量に行くことに注意してください 

 限り理由毎bについて、前記決定された休止位置もBを固定した後、[1]〜Bを列挙することができるように。

 

書式#include <iostreamの> 
の#include <cstdioを> 
する#include <cstdlib> 
書式#include <CStringの> 
の#include < 文字列 > 
の#include <キュー> 
の#include <アルゴリズム> 
書式#include <マップ> 
書式#include <iomanip>
 に#define INF 99999999
 使用 名前空間はstd;
const  int型 MAXN = 2E6 + 10 
typedefの長い 長いLL。
INT [MAXN]。
LL和[MAXN]。
マップ <LL、int型 > 融点; 

int型
{
     int型N、M。
    scanf関数(" %d個の%のD "、&​​N、&M)。
    以下のためにint型 i = 1 ; iが<= N; iが++ 
    { 
        scanf関数(" %のLLDを"、&和[I])。
        和[I] + =和[I - 1 ]。
        MP [和[I] = 1 
    } 
    のためのint型 I = 1 ; I <= M; iが++)のscanf(" %dの"、および[I])。
    ソート(合計 + 1、合計+ 1+N);
    INT LEN =ユニーク(和+ 1、和+ 1個の + N) -和- 1 int型 ANS = 0 ;
    以下のためにint型 i = 1 ; iは= LEN <; iは++ 
    { 
        int型の CNT = 0、NUM = [ 1 ] - 和[I];
        INTの J = 1 ; J <= Mであり、j ++ 
        { 
            場合(MP [J] - NUM])CNT ++ 
        } 
        場合(CNT> = m)は++ ANS 
    } 
    のprintf(" %Dを\ n " 、ANS)。
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/EchoZQN/p/11370592.html