牛客網プログラミング小結(四)——map


取引明細書(京東2016実習生本題)
金融証券業界の超良い報酬待遇は、多くの求職者を引きつけて応募し、東さんも例外ではなく、証券会社に応募するつもりだ.面接官は彼女のデータ分析、処理、符号化能力を考察するために、以下の問題を準備した.
株式取引において、委託とは、株式トレーダーが証券会社で株式を売買することを指す.各手の依頼には、依頼番号i、価格pi、購入または販売フラグdi、および取引数qiが含まれる.
取引処理では,同類業務(購入または売却)における同一価格のすべての委託を統合し,リストを形成する必要がある.リストの第1部は、価格降順に並べられた合併後の売却依頼であり、次いで同じ順序に並べられた購入合併依頼が続く.証券会社が関心を持っているのは、比較的人気のあるs条合併委託情報であり、最も人気のあるs条合併委託を購入し、売る必要がある.買い付け依頼については,売れ残りはオファーの高い依頼であり,売れ残り依頼ではオファーの低い方が売れ残りである.購入または販売の合併依頼数がs条より小さい場合は、すべてリストに入れます.
今、東さんがもらったのはn個の依頼です.一番人気のあるs個の合併依頼を見つけてください.
入力入力にはいくつかのグループがあり、各グループの第1の動作の2つの正の整数nとs(1<=n<=1000、1<=s<=50)は、それぞれ委託数と最も人気のある清単数を表し、次のnの動作の具体的な委託情報は、各行に3つの部分が含まれ、第1の部分は1つのアルファベット「B」または「S」であり、購入または売却を表し、後の2つの部分は2つの整数pとqであり、オファーと数量を表す.販売依頼のオファーは、購入依頼のオファーよりも高いです.
サンプル入力6 2 B 103 S 50 2 S 40 1 S 50 6 B 20 4 B 25 10
出力出力は2 s行を超えず、依頼リストをマージし、フォーマットは入力と同じです.
サンプル出力S 50 8 S 40 1 B 25 10 B 20 4
時間制限C/C++言語:1000 MSその他言語:3000 MS
メモリ制限C/C++言語:65536 KBその他言語:589824 KB
#include
using namespace std;
int main()
{
    int n;
    unsigned s;
    while(cin>>n>>s)
    {
        map buy,sell;//  ,  
        //    ,  map
        for(int i=0;i>temp;
            cin>>p>>q;
            //        
            if(temp=="B")
            {
                if(buy.find(p)==buy.end())
                    buy[p]=q;
                else
                    buy[p]+=q;
            }
            else if(temp=="S")
            {
                if(sell.find(p)==sell.end())
                    sell[p]=q;
                else
                    sell[p]+=q;
            }
        }
        //        
        int sCount=sell.size()::iterator it=sell.begin();
        for(int i=0;i0;it--,sCount--)
            cout<first<second<::reverse_iterator it=buy.rbegin();bCount>0;it++,bCount--)
            cout<first<second<

最大マッピング
n個の文字列があり、各文字列はA-Jの大文字で構成されている.各文字を0~9の数字にマッピングし、異なる文字を異なる数字にマッピングします.これにより、各文字列は整数と見なすことができ、唯一の要求は、これらの整数が正の整数であり、それらの文字列が先頭ゼロを持つことができないことである.文字列が表す整数の和を最大にするには、どのように文字をマッピングしますか?
説明を入力:
各試験例は、1組のデータのみを含み、各データの第1の動作は正の整数nであり、次いでn行があり、各行の長さは12を超えず、大文字A−Jのみを含む文字列である.nは50以下であり、少なくとも1つの文字が任意の文字列ではない頭文字が存在する.
出力の説明:
最大和がいくらであるかを示す数を出力します.
入力例:
2ABCBCA
出力例:
1875
#include
#include
#include
#include
#include
#include
using namespace std;
bool cmp(paira,pairb)
{
    return a.second>b.second;
}
int main()
{
    int n;
    while(cin>>n)
    {
        mapm;
        set f;//     
        for(int i=0;i>s;
            long long b=1;
            for(string::reverse_iterator i=s.rbegin();i >v(m.begin(),m.end());
        sort(v.begin(),v.end(),cmp);
        int i=v.size()-1;
        //       ,                  
        while(v.size()==10&&i>=0&&f.find((v[i].first))!=f.end())
            i--;
        unsigned long long res=0;
        if(i!=(v.size()-1))
        {
            //      0,    
            v.erase(v.begin()+i);
        }
        int b=9;
        for(int i=0;i