發表於 C++CPE考古題UVA一顆星

【CPE】UVA 10420 List of Conquests 一星必考題 by C++

10530 List of Conquests

簡易翻譯和條件:

這題題目超級長….
基本上就是要你紀錄字串出現次數和最後輸出要造字母順序

這一題我使用很多偷懶的東西
像是:

  • istringstream 用來分割字串用
  • 紅黑樹 map
  • sort
  • vector

istringstream 字串流(是這樣翻譯的嗎OAO?),是我最常拿來分割字串用的,依稀記得大一時也是這樣解基哥(我大學老師的綽號XD)的題目的~

基本上都是大二會學到的演算法(?)
紅黑樹用來當作 dict 的使用,做紀錄字串是否出現時非常好用!
而且速度很快呢!

vector + sort 基本上就是方便排序啦~
這是很基本的做法,至少我是常常這樣使用的囉!

基本上這題就沒有太多的技術了,寫得很快~

如果有任何問題或是你有更好的寫法歡迎再下面留言討論喔!
我們下一題見啦!

程式碼:

#include 
#include 
#include <map>
#include 
#include 
#include 

using namespace std;

struct item{
    string name;
    int count;
};

bool cmp(struct item i1, struct item i2){
    // return i1.count &gt; i2.count;
    return i1.name &gt; n;

    map mtree;

    while(n--){
        cin &gt;&gt; ws;
        string a = "";
        getline(cin, a);

        istringstream iss(a);
        string name = "NONE";
        getline(iss, name, ' ');

        if(mtree.find(name)==mtree.end()){
            mtree[name] = 1;
        }else{
            mtree[name] = mtree[name] + 1;
        }

    }

    vector arr;
    for(map::iterator it=mtree.begin(); it!=mtree.end(); it++){

        struct item i;
        i.name = it-&gt;first;
        i.count = it-&gt;second ;
        arr.push_back(i);
    }

    sort(arr.begin(), arr.end(), cmp);

    for(vector::iterator it=arr.begin(); it!=arr.end(); it++){
        cout &lt;&lt; (*it).name &lt;&lt; &quot; &quot; &lt;&lt; (*it).count &lt;&lt; endl;
    }


    return 0;
}



作者:

一位 熱愛資工領域、喜歡好笑事物、偶爾打打網球 的學生 ! For A Better Me!

發表迴響

Please log in using one of these methods to post your comment:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.