文字列値(-'0「)

タイトル説明

興味深いの文字列値の計算があります:文字の各文字列の統計情報の数が表示され、その後、文字列としてすべての文字の数と値の二乗
のような:含まれる文字列「abacaba」を、4「」、 2 'B'、1 'C'は、この文字列値は4 * 4 + 2 + 1 * 2 * 1 = 21であり、
牛肉は、ストリングS、Sがあり、最もkから除去されることを可能にします文字は、あなたの目標は、文字列の最小値を取得することです。

説明を入力します。

入力は、2つの行で構成され、文字列sの最初の行は、sが文字列の長さの長さ(1≤長さ≤50)であり 、 小文字のみ( - Z「」「A」を含みます )。
第二行は、整数k(0≤k個の≤長)が含まれ 、 すなわち、文字の数を除去することができました。

出力説明:

得られた最小値を表す出力整数
例1

エントリー

コピー
よるABA 
1

輸出

コピー
2

書式#include <iostreamの> 
の#include < 文字列 > 
の#include <アルゴリズム>
 使用して 名前空間はstdを、

BOOL CMP(CONSTの INT&X、CONSTの INTY)
{ 
    戻り X> Yと、
} 
int型のmain()
{ 
   文字列STR。
   int型 de_num = 0、合計= 0 ;
   int型 dele_num、arr_size = 0 ;
   int型 ARR [ 300 ];フィル(ARR、ARR + 3000);// 過度の時間によって配列はなりにくい
   のgetline(CIN、STR); 
   CIN >> dele_num;
    // COUT << 'A' - '0' <<てendl; // 49 
   のためのint型 I = 0 ;私はSTRを< .size();私は++ 
   ARR [STR [I] - ' 0 ' ] ++; // ノートは[STR [I] - '0'] 
   分類(ARR + 49、ARR + 49 + 26は、CMP); // ソートされた最初のパス(降順)//これは(CMPは、+ 97編曲:+ 26編曲:+ 97)私はソートを考えるために前に前に間違っていることに注意してください。
 //    (私は49 = int型のために、私は49 + 26 < ; i)が++ //なぜ'0'理由'' ascll 98、49回の開始から注文49であるので、 ''最初の添字ARR要素で49でなければなりません
 //    COUT << ARR [I ] <<"「;

    int型のk = 49 ;
    一方、(dele_num-- 
    { 
        [K] ARR - 
        ソート(ARR + 49、編曲:+ 49 + 26、CMP); // 继续排序
    } 
     ためのint型私は= 49 ; iが< 49 + 26 ; iが++ 
    合計 + = ARR [I] * [I] ARR。    
    coutの << 合計。

    リターン 0 ; 
} 
/ * 

用例:
wersrsresesrsesrawsdsw 
11 
出力に対応しなければなりません。
23 
あなたの出力は次のとおりです。
31 * /

 

おすすめ

転載: www.cnblogs.com/cstdio1/p/10983100.html