poj 1002 电话号码查重

来源:互联网 发布:湖人vs快船数据 编辑:程序博客网 时间:2024/04/30 03:40

虽然网上都说这是一道水题,其实我也感觉这题思路满清晰的,但死活提交不通过,基本都是时间超了,后来勉强痛过了,但效果还是不怎么理想。这里做一个简单分析

1.我们一开始的程序是利用stl中的vector,string 等容器读入数据,然后自己写了一个快速排序的算法,对存储在vector<string>中的string串进行排序,可想而知,对字符串排序的效率是有多滴,尤其面对这道题这么变态的测试数据的时候。

2.我们后来将数据存到vector<int>中去,有效果,在测试bt的数据的时候,过了10s终于出来结果了,这是对快速排序对象的改善。但poj不接受。

3.后来,经过实验室师兄解释,vector,string 都会自动分配内存,并自动增长,但这里是对时间有要求的,对100000组数据而言,vector分配几次内存,显然不可接受,于是,我们就不能装B的使用容器了,开始转化用数组。

4.这里其实可以用快速排序实现,但是我们脑抽了,想到hash表蛮好的,就使用了hash表进行处理,但是服务器不支持用hash_map 编译不通过,于是我们换用map

5.输出格式是有要求的,如果使用string或char【】数组来输出,没有问题,但如果要用cout输出,就需要进行格式控制了。这里参考文章:http://blog.csdn.net/onlyou930/article/details/6638896


Source Code

Problem: 1002 User: zhyh2010Memory: 3520K Time: 1204MSLanguage: C++ Result: Accepted



#include <iostream>#include <map>#include <iomanip>using namespace std;class PhoneNUM{public:PhoneNUM();~PhoneNUM();void input();void output();protected:void initmap();private://int m_data[100001];char m_input[50];//char m_input[20];size_t m_size;map<char, char> m_map;map<int, int> m_dict;};PhoneNUM::PhoneNUM(){m_size = 0;initmap();}PhoneNUM::~PhoneNUM(){}void PhoneNUM::input(){//cout << "input the number of the phones:\t" << endl;cin >> m_size;//string phone;for (int i = 0; i != m_size; ++i ){cin >> m_input;//handlePhone(phone);int j = 0;int temp = 0;int res = 0;while (m_input[j] != '\0'){if (m_input[j] == '-'){++j;continue;}if (m_input[j] >= '0' && m_input[j] <= '9'){temp = m_input[j] - '0';}else{temp = m_map[m_input[j]];}res = 10 * res + temp;++j;}//m_data[i] = res;// dict handleif (m_dict.count(res) == 0){m_dict[res] = 1;}else{++m_dict[res];}}}void PhoneNUM::output(){bool isdul = false;map<int, int>::const_iterator iter = m_dict.begin();for (; iter != m_dict.end(); ++iter){if (iter->second > 1){isdul = true;cout << setfill('0') << setw(3) << iter->first / 10000 << "-"<< setfill('0') << setw(4) << iter->first % 10000 <<" "<< iter->second << endl;}}if (isdul == false){cout << "No duplicates." << endl;}}void PhoneNUM::initmap(){m_map['A'] = 2;m_map['B'] = 2;m_map['C'] = 2;m_map['D'] = 3;m_map['E'] = 3;m_map['F'] = 3;m_map['G'] = 4;m_map['H'] = 4;m_map['I'] = 4;m_map['J'] = 5;m_map['K'] = 5;m_map['L'] = 5;m_map['M'] = 6;m_map['N'] = 6;m_map['O'] = 6;m_map['P'] = 7;m_map['R'] = 7;m_map['S'] = 7;m_map['T'] = 8;m_map['U'] = 8;m_map['V'] = 8;m_map['W'] = 9;m_map['X'] = 9;m_map['Y'] = 9;}int main(int argc, char**argv){PhoneNUM instance;instance.input();//instance.quicksort();instance.output();}



0 0
原创粉丝点击