C. Nauuoとカード

リンク:https://codeforces.com/contest/1173/problem/C

質問の意味:

Nauuoはトランプが大好きな女の子です。

ある日、彼女はトランプが、カードは、いくつかの空のものと混合していることがわかりました。

あり  nは n個から番号のカード  1へ1  のn nであり、彼らは別と混合した  n個のn空のカード。彼女が積もっ  2枚のn 2nのカードをして描いた  n個のnそれらの。 nは Nauuoの手の中にn個のカードが与えられています。残り  のn Nパイルのカードはまた、上から下への順序で与えられます。

一度の操作では、彼女は彼女の手でカードを選択し、それを再生することができます - 山の一番下にそれを置く、その後、山から一番上のカードを引きます。

Nauuoを欲しがっている  n個のn番のカードを(増やすために積み上げ  I上から下まで杭のi番目のカードがカードである  、私は可能な限り迅速にI)。あなたは彼女に操作の最小数を伝えることはできますか?

アイデア:

直接仕上げを考慮することはできません。

この後0いくつかを検討し、n個のカードと一緒に遊びます。

それは、I-1を得ることができる位置にあるときにのみ、第二の位置PIで、次いで、i番目のカードアレイを仮定する。Nは、完成見に出てき。

得られたRES = MAX(RES、PI-I + 1 + N)。

コード:

#include <ビット/ STDC ++ H> 

名前空間STDを使用して、

typedefの長い長いLL。
const int型MAXN = 2E5 + 10。
const int型MOD = 1E9 + 7。
N INT、M、K、T。

マップ<int型、int型>では、
[MAXN] int型。

INTメイン()
{ 
// freopenは( "test.in"、 "R"、STDIN)。
    cinを>> N; 
    以下のために(INT i = 1; iが= <N; iは++)
        CIN >> [I]において、[I] = 0; 
    以下のために(INT i = 1; iが= <N; iは++)
        CIN >> [I]において、[I] = I。
    ([1]において)場合
    、{ 
        I = 2 int型。
        (; IN [I] ==では[I-1] +1; iが++)のために、
        (N == [I-1]で)なら
        、{ 
            int型J。
            J <;(J = iについて
            IF(J> N)
                COUT << N-I + 1 << ENDL。
                0を返します。
            } 
        } 
    } 
    int型RES = 0。
    以下のために(INT i = 1; iが<= N; iは++)
        RES = MAX(RES、IN [I] -i + 1 + N)。
    coutの<< RES <<てendl; 

    0を返します。
}

  

おすすめ

転載: www.cnblogs.com/YDDDD/p/10990891.html