Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
偶觉得直接建查找表就可以了,空间刚好够用In Reply To:用排序还是哈希? Posted by:flykitej at 2007-05-10 15:36:20 #include <iostream> #include <string> #include <vector> #include <algorithm> #include <functional> using namespace std; const int lut[] = { 2, 2, 2, 3, 3, 3, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 0, 7, 7, 8, 8, 8, 9, 9, 9, 0, }; int main() { int count; cin >> count; vector<string> vec_num; vec_num.reserve(count); string str, num_str; char ch; char* bucket = new char[10000001*3]; memset(bucket, 0, 10000001 * 3 * sizeof(char)); while ( count-- && cin >> str ) { int i = 0; num_str = ""; while ( (ch=str[i++])!='\0') { if ( ch == '-') continue; else if ( ch > '9') num_str.append(1, lut[ch-'A'] +'0'); else num_str.append(1, ch); } i = atoi(num_str.c_str()) * 3; (*((int*)&(bucket[i])))++; } bool bNoDuplicate = true; char* p = bucket; char des[20]; for ( int i = 0; i < 10000000; i++, p+=3 ) { if ((count = (*((int*)p) & 0x00FFFFFF)) > 1) { bNoDuplicate = false; sprintf(des, "%07d %d", i, count); str = des; str.insert(3, "-"); cout << str << endl; } } if ( bNoDuplicate ) cout << "No duplicates." << endl; delete[] bucket; return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator