ロングCodeForcesをジャンプ - 479D

ヴァレリーはバーランドの学校でPEの先生です。すぐに学生は走幅跳でのテストを取るしようとしている、とヴァレリーは、彼のお気に入りの定規を失ってしまいました!

しかし、失望するための理由はヴァレリーが別の定規を発見したように、その長さは、存在しないリットルセンチ。定規は既に持っているのn彼は測定を行うことが可能なマークを、。我々はマークが1から番号が付けられていることを前提とnは、彼らがその最後まで定規の初めから出現順に。最初のポイントは、定規の始まりと一致すると原点を表しています。最後のマークが距離で、定規の端部と一致L原点から。この定規は、増加するシーケンスによってrepesentedすることができる1、  2、...、  Niは、の距離を示しI原点から番目のマーク(1  = 0、N  =  L)。

ヴァレリーは、定規で、彼は距離測定することができると考えているDの整数のペアがある場合、センチIおよびJ1≤  I  ≤  J  ≤  nが)、その結果との間の距離iは番目とJ番目のマーク正確に等しいD(言い換えれば、jは  -  私は  =  D)。

規則の下で、女の子は、少なくともジャンプすることができなければならないのxセンチ、少年は、少なくともジャンプすることができるべきであるYX  <  Y)センチ。子供の能力をテストするには、ヴァレリーは、各距離測定する定規必要のxyは

あなたの仕事は、あなたは彼らが距離を測定するために使用することができるように定規に追加する必要があり、追加のマークの最小数であるかを決定することで、XYはヴァレリーは、定規の長さを超えない原点から任意の整数の非負距離でマークを追加することができます。


入力

最初の行は、4つの正のスペースで区切られた整数含まNLXY2≤  N  ≤10 52≤  L  ≤10 91≤  X  <  Y  ≤  Lマークの数、の長さ- )定規とそれに対応少年少女のためのジャンプ規範。

2行目は、一連の含まnは整数1、  2、...、  N0 =  A 1  <  A 2  <... <  A N  =  L)、Iから番組距離をI -原点に目のマーク。

出力

最初の行では、単一の非負の整数印刷Vルーラーに追加する必要があるとマークの最小数を- 。

第二のライン印刷におけるVのスペースで区切られた整数であり、P 1、  P 2、...、  PのV0≤  P I  ≤  L)。番号P iがあることを意味番目のマークはの距離にあるべきであるP iの原点から数センチ。任意の順序でマークを印刷します。複数の解決策がある場合は、それらのいずれかを印刷します。

入力
3 250 185 230 
0 185 250
出力
1 
230
入力
4 250 185 230 
0 20 185 250
出力
0
入力
2 300 185 230 
0 300
出力
2 
185 230
注意

最初のサンプルでは、最初の距離を測定することは不可能である230センチメートルを。そのためには、追加するのに十分である20センチメートルマークまたは230センチメートルマーク。

第二のサンプルでは、すでにの距離を測定するために定規を使用することができます185と、新しいマークを追加する必要はありませんので、230センチ。

第三のサンプル中の定規は、最初と最後のマークを含んでいます。私たちは、子どもたちのスキルをテストすることができるように2つのマークを追加する必要があります。

ID-OJ:
codeforces-479D

著者:
Caution_Xの

提出日:
20191109個の

タグ:
バイナリ、貪欲

説明モデリング:
N A [i]が、そこに求めXは定規の目盛りを有するかどうか定規上の既知のスケールによって測定した長さそして、yの長さは?
点の数に対応するスケール値を追加する出力ニーズ

を解決するための主要なステップを
:0,1,2 スケール点のみ添加されるべきである
直接決定されるゼロポイントを追加する必要が
唯一の補足点スケールか否かを判断します。 ①呼ばTX = A [i]が+ X 、 Xを検出することができるスケールの右側にある[I]で表さ描画することができる
場合規模で(TX + Y)または(TX-y)が、知られていないバイナリ検索が決定されます。スケールポイントTX、同様に、②はTY = [I] + yと呼ばれる 、
同様の動作を繰り返す①限り、①、②の条件を満足することができ、満足していない場合:TX =覚えA [i]が可能を示す-X-、
スケール測定点xを見つけるために、示さTY = [I] -yスケール点[i]は、左、共感操作。それは上記の動作を見つけることができれば、我々は
唯一、ポイントのスケールを追加するためにそれ以外の場合は、必要性は、2つのスケールのポイントを追加する必要があります。


警告:
フォーカス点1と点2点の数が決意文献必要決定
長い11ポイントのスケールを補完するものとして、実施例X = 6、Y = 7、公知の4,5-スケール点を、


ACコード:

書式#include <cstdioを> 
する#include <CStringの> 
の#include <アルゴリズム> 使用して名前空間をSTD。const int型 MAXN = 1E5 + 5 INT N、L、X、Y、A [MAXN]。ブール裁判官(INT U){
     場合(U < 0 || U> L)リターンint型 K = LOWER_BOUND(A、A + N、U) - A。
    戻り U == A [K]。
} ボイド解く(){
     int型 ANS = 0 以下のためのint型 I =
 
 
 
 
 
 
 
0 ; I <N; I ++ ){
         場合(裁判官(A [i]が- X)||裁判官(A [i]が+ X))
            ANS | = 1 もし - (裁判官(A [i]のY)||裁判官(A [i]が+ Y))は
            ANS = | 2 
    } 
 
    場合(ANS == 3 
        のprintf(" 0 \ n " );
    他の 場合(ANS == 2 
        のprintf(" 1 \ N%D \ n " 、X)。
    それ以外の 場合(ANS == 1 
        のprintf(" 1 \ N%D \ n " 、Y)。
    { 
 
        ためには、INTは私= 0 ; I <N; I ++ ){
             int型 TX = A [i]が+ X。
            INT TY = A [i]が+ Y。
 
            もし(TX <= L &&(裁判官(TX - Y)||裁判官(TX + Y))){ 
                のprintf(" 1 \ N%D \ n " 、TX)。
                リターン; 
            } 
 
            であれば(TY <= L &&(裁判官(TY - X)||裁判官(TY + X))){ 
                のprintf(" 1 \ N%D \ n " 、TY)。
                リターン; 
            } 
        } 
 
        のためにINT iは= 0 ; I <N; I ++ ){
             int型 TX = A [i]が- X。
            INT TY = A [i]が- Y。
 
            もし(TX> = 0 &&(裁判官(TX - Y)||裁判官(TX + Y))){ 
                のprintf(" 1 \ N%D \ n " 、TX)。
                リターン; 
            } 
 
            であれば(TY> = 0 &&(裁判官(TY - X)||裁判官(TY + X))){ 
                のprintf(" 1 \ N%D \ n "、TY)。
                リターン; 
            } 
        } 
        のprintf(" 2 \ n%D%D \ n " 、X、Y)。
    } 
} 
 
int型のmain(){ 
    scanf関数(" %D%D%D%D "、&​​N、&L、およびX&Y)。
    以下のためにINT iが= 0 ; I <N; I ++ 
        のscanf(" %dの"、&A [I])。
    解決する(); 
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/cautx/p/11828275.html