この質問は、私はかなり良い感じ、耳を傾け、学校の兄弟の弟が話す食べることを学ぶための別の方法です^ _ ^このような弟は、多くの場合、それを収穫することができ、タイトル、おそらく来年が書かれて期待されている、ハハの話をたくさん聞いているかのように〜
問題:
個々の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の対 < INT、INT > タプル; 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 * /