タイトル説明
興味深いの文字列値の計算があります:文字の各文字列の統計情報の数が表示され、その後、文字列としてすべての文字の数と値の二乗
のような:含まれる文字列「abacaba」を、4「」、 2 'B'、1 'C'は、この文字列値は4 * 4 + 2 + 1 * 2 * 1 = 21であり、
牛肉は、ストリングS、Sがあり、最もkから除去されることを可能にします文字は、あなたの目標は、文字列の最小値を取得することです。
のような:含まれる文字列「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
輸出
コピー2
書式#include <iostreamの> の#include < 文字列 > の#include <アルゴリズム> 使用して 名前空間はstdを、 BOOL CMP(CONSTの INT&X、CONSTの INT&Y) { 戻り X> Yと、 } int型のmain() { 文字列STR。 int型 de_num = 0、合計= 0 ; int型 dele_num、arr_size = 0 ; int型 ARR [ 300 ];フィル(ARR、ARR + 300、0);// 過度の時間によって配列はなりにくい の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 * /