興味深い質問2 ---思考の一種、列挙

 

  この質問は、私はかなり良い感じ、耳を傾け、学校の兄弟の弟が話す食べることを学ぶための別の方法です^ _ ^このような弟は、多くの場合、それを収穫することができ、タイトル、おそらく来年が書かれて期待されている、ハハの話をたくさん聞いているかのように〜

  問題:

    個々のN面には、位置(x、y)タプル、m面がドア、所定の位置(x、y)を与えられました。今合意が唯一、すべてのドアの男を入力することができ、そして男は唯一の(X-1、Y-1と移動する)下左に移動することができ、私はドアまでどのように多くの人々が尋ねますか?

 

  解決:

    順序、列挙ドアを下降することにより、ドアとx値。[i]が全て.Xセットの値にyと、最小値が以上のドアを発見された私は、ドアより大きい列挙現在のドアのための[I] .Y、ゲートに割り当てるIは、次いでからセットは除外し、その後、ドア列挙iは1 +。

 

  コードは以下の通りであります:

  

#include <iostreamの> 
する#include <アルゴリズム> 
の#include < SET >
 使用して 名前空間STD;
 / * 
問題:がN-個体、位置(x、y)タプル所定の面の面ドアmに、所与の位置(x、y)から。今、契約は、すべてのドアの男を入力することができ、そして男は唯一の(X-1、Y-1およびモバイルに)ダウンし、左に移動することができますほとんどの
        ドアどのように多くの人々 ?
溶液:順序、列挙ドアを下降することにより、ドアとx値。[i]が全て.Xセットの値にyと、最小値が以上のドアを発見された私は、ドアより大きい列挙現在のドアのための[I] .Y、ゲートに割り当てるIは、次いでからセットは
        除外し、その後、ドア列挙iは1 +。
* / 
のConst  INT N = 1E3 + 5。; 
typedefの対 < INTINT > タプル;
 BOOL CMP(CONSTタプルA、CONST タプルB){
    戻る > a.first b.first。
} 

多重集合 < INT > S。
マルチセット < 整数 > ::イテレータit。

INT のmain()
{ 
    int型 N、M。CIN >> N >> M。
    タプル人[N]、ドア[N]; 
    以下のためにint型 i = 0 ; iがn <; iは++ ){ 
        CIN >>人[i]が1次回>> 人[I] .second。
    } 
    ソート(人々 、人々 + N、CMP)。
    以下のためにint型 i = 0 ; iがm <; iは++ ){ 
        CIN>>ドア[i]が1次回>> ドア[i]の.second。
    } 
    ソート(ドア、ドア + M、CMP)。
    
    int型 ANS = 0 ;
    int型のk = 0 以下のためにint型 i = 0 ; iがm <; iは++ ){
         一方(K < N){
             場合(人[K] 1次回> = 扉[i]が1次回){ 
                s.insert(人[K] .second) ; 
                K ++ ; 
            } 
        } 
        もし(s.count(扉[I] .second)> 0){
            ANS ++
            s.erase(s.find(扉[I] .second))。
        } 
        { 
            それは = s.upper_bound(ドアを[I] .second)。
            もし(!それ= s.end()){ 
                ANS ++ ; 
                s.erase(それ)。
            } 
        } 
    } 
    のstd :: COUT << " 回答= " << ANS << ENDL。
    リターン 0 ; 
} 

/ * 
2 2 
5 3 
6 5 
3 4 
4 2 
* /

 

おすすめ

転載: www.cnblogs.com/chen9510/p/11614030.html