魔法のランプ(HDU - 3183)

キキは旅行が好きです。彼女は魔法のランプ、ランプで残念ながら精霊を見つけた一日はとても親切ではありません。キキは、質問に答える必要があり、その後、精霊は彼女の夢の一つを実現します。 
質問です:あなたが正確にm個の数字を削除するには許可されている、あなたの整数を与えます。左の数字は、新たな整数を形成します。あなたはそれを最小限にする必要があります。 
あなたは数字の順序を変更することはできません。今、あなたはキキが彼女の夢を実現するために助けることができますか? 

いくつかのテストケースはInputThereです。 
各テストケースを使用して、与えられた整数(最大で1000デジットが含まれてもよい。)と整数m(整数n桁を含む場合、MはN次いで大きくないであろう)を含むであろう。指定された整数は、先行ゼロは含まれません。 
あなたは1行で取得することができますOutputForそれぞれの場合、出力最小結果。 
結果がゼロをリード含まれている場合は、それを無視。 
サンプル入力

178543 4 
1000001 1 
100001 2 
12345 2 
54321 2

サンプル出力

13である
。1 
0 
123 
321 

イタリアは、N個の文字列が残っている最小の文字列の長さMから削除されていること。

MがNの長い文字列から文字を削除し、Nは文字NM最小列の長い列から選択に対応する、最初の文字は、もし場合には[0、M]であることが最も小さな文字を見つけることです標識されたK、第2の探索範囲は[K + 1、M + 1である ]、
見て終了するまでなどと、テーブルSTを用いてシミュレートすることができます。

#include <iostreamの> 
する#include <cstdioを> 
する#include <sstream提供> 
の#include <CStringの> 
する#include <アルゴリズム> 
の#include <cmath>
 使用して 名前空間STD。
const  int型 MAXN = 1001 ;
INT D [MAXN] [ 10 ]。
チャー[MAXN]を、NUM [MAXN]。
INTのN、M。
INTミネソタ州(INT iが、INT J)// 核心
{
     戻り [I] <= [j]を?I:J。
} 
INT getminn(INT L、int型R)
{ 
    int型 K = LOG2(R-L + 1 )。
    戻りミネソタ州(D [L] [K]、D [R-(1 << K)+ 1 ] [k]を)。
} 
int型のmain()
{ 
    一方(scanf関数(" %sの%のD "!、&M)= EOF)
    { 
        int型 LEN = STRLEN(A)。
        N = LEN。
        M = len- M。
        以下のためにint型 i = 1 ; iがn <; iは++)   // 下标的序列 
            D [i]が[ 0 ] = I。
        にとってのInt J = 1。 1 << J)<= N; J ++ のためのINT I = 0、I +(1 << J) - 1。 <N-; I ++の
                D [I] [J] =ミネソタ州(D [I]、[J- 1 ]、D [Iは、+(1 <<(J- 1))] [J- 1 ]); //は。小さいインデックス値は、の値戻り
        値int ; JはIを
        I = Jが= 0 ;
         一方(M-- 
        { 
            // int型のL = I;
             // INT LEN-M-R&LT = 1。
             getminnは= I(I、lenの-M-を1。);   // mが有し、一方は、 -第一の例を、それがM 0に行く最初に相当する
                // INT K = IOG2(L-R&LT + 1。 );
                // I ==ミネソタ州(D [L] [K]、D [R-(<< 1 K)+ +1] [K]); 
            NUM [J ++] = A [I ++ ]; 
        } 
        ための(I = 0 ; Iは、Jが<; I ++のIF!=(NUM [I] ' 0 ' BREAK ;
         IF(I == J)
        { 
            のprintf(" N- 0 \ " );
             続行; 
        } 
        ながら(私は<J)
        { 
            のprintf(" %のC " 、NUM [I])。
            I ++ ; 
        } 
        のprintf(" の\ n " ); 
    } 
}
コードの表示
 

 

 

おすすめ

転載: www.cnblogs.com/switch-waht/p/11405550.html