poj 1002 電話號碼查重

2021-06-27 03:47:27 字數 1354 閱讀 7838

雖然網上都說這是一道水題,其實我也感覺這題思路滿清晰的,但死活提交不通過,基本都是時間超了,後來勉強痛過了,但效果還是不怎麼理想。這裡做乙個簡單分析

1.我們一開始的程式是利用stl中的vector,string 等容器讀入資料,然後自己寫了乙個快速排序的演算法,對儲存在vector中的string串進行排序,可想而知,對字串排序的效率是有多滴,尤其面對這道題這麼**的測試資料的時候。

2.我們後來將資料存到vector中去,有效果,在測試bt的資料的時候,過了10s終於出來結果了,這是對快速排序物件的改善。但poj不接受。

3.後來,經過實驗室師兄解釋,vector,string 都會自動分配記憶體,並自動增長,但這裡是對時間有要求的,對100000組資料而言,vector分配幾次記憶體,顯然不可接受,於是,我們就不能裝b的使用容器了,開始轉化用陣列。

4.這裡其實可以用快速排序實現,但是我們腦抽了,想到hash表蠻好的,就使用了hash表進行處理,但是伺服器不支援用hash_map 編譯不通過,於是我們換用map

5.輸出格式是有要求的,如果使用string或char【】陣列來輸出,沒有問題,但如果要用cout輸出,就需要進行格式控制了。這裡參考文章:

source code

problem:1002

user:zhyh2010

memory:3520k

time:1204ms

language:c++

result:accepted

#include #include #include using namespace std;

class phonenum

;phonenum::phonenum()

phonenum::~phonenum()

void phonenum::input()

if (m_input[j] >= '0' && m_input[j] <= '9')

else

res = 10 * res + temp;

++j;

} //m_data[i] = res;

// dict handle

if (m_dict.count(res) == 0)

else

}}void phonenum::output()

} if (isdul == false) }

void phonenum::initmap()

int main(int argc, char**argv)

poj 1002 (電話號碼)

題目意思很簡單,就不重複了。這是乙個很簡單的模擬題,但是我居然wa了很多次。看了題目的討論,才發現,號碼還有數字0開頭的。簡直無語了。這組資料輸出 000 0000 2 也是考慮不全,居然沒想到還會有0開頭的 號碼。如下 include include includeusing namespace ...

POJ 1002 電話號碼字串處理

這題比較簡單,就是對 號碼的字串處理並排序輸出,但是實現時有幾個注意的地方 1 用map儲存比較方便,可以自動根據string的排序規則排序,而且題目資料恰好是的k v儲存特點。2 用另乙個字串重新拼接待輸出地字串比直接對輸入字串進行替換移位等操作要方便。3 注意字元和數字的ascii的轉化。4 的...

1002 方便記憶的電話號碼

英文本母 除q和z外 和 號碼存在著對應關係,如下所示 a,b,c 2 d,e,f 3 g,h,i 4 j,k,l 5 m,n,o 6 p,r,s 7 t,u,v 8 w,x,y 9 標準的 號碼格式是 x,其中x表示0 9中的乙個數字。有時為了方便記憶 號碼,我們會將 號碼的數字轉變為英文本母,如...