POJ_1002:487-3279
原题链接:http://poj.org/problem?id=1002
分类:字符串处理与哈希映射
算法:将字符串先转换为整数,将整数作为数组下标进行出现次数的统计,count数组开始初始化为0,统计整数的出现次数。
c++源代码:
1 #include<iostream> 2 #include<string> 3 #include<cmath> 4 5 using namespace std; 6 7 long n; 8 long count[10000000] = {0}; 9 10 long change_s(string); 11 string change_long(long); 12 13 int main() 14 { 15 cin >> n; 16 bool dup = false; 17 for (long i = 0; i < n; i++) 18 { 19 string tmp; 20 cin >> tmp; 21 long m = change_s(tmp); 22 count[m]++; 23 if (count[m] > 1) dup = true; 24 } 25 if (dup == false) 26 cout << "No duplicates." << endl; 27 else 28 for(long i = 0; i < 10000000; i++) 29 if (count[i] > 1) 30 cout << change_long(i) << " " << count[i] << endl; 31 return 0; 32 } 33 34 long change_s(string s) 35 { 36 long nn = 0; 37 long k = 0; 38 for (long i = s.length()-1; i >= 0; i--) 39 { 40 if (s[i] == 'A' || s[i] == 'B' || s[i] == 'C') 41 nn += 2 * pow(10.0,double(k++)); 42 else if (s[i] == 'D' || s[i] == 'E' || s[i] == 'F') 43 nn += 3 * pow(10.0,double(k++)); 44 else if (s[i] == 'G' || s[i] == 'H' || s[i] == 'I') 45 nn += 4 * pow(10.0,double(k++)); 46 else if (s[i] == 'J' || s[i] == 'K' || s[i] == 'L') 47 nn += 5 * pow(10.0,double(k++)); 48 else if (s[i] == 'M' || s[i] == 'N' || s[i] == 'O') 49 nn += 6 * pow(10.0,double(k++)); 50 else if (s[i] == 'P' || s[i] == 'R' || s[i] == 'S') 51 nn += 7 * pow(10.0,double(k++)); 52 else if (s[i] == 'T' || s[i] == 'U' || s[i] == 'V') 53 nn += 8 * pow(10.0,double(k++)); 54 else if (s[i] == 'W' || s[i] == 'X' || s[i] == 'Y') 55 nn += 9 * pow(10.0,double(k++)); 56 else if (s[i] >= '0' && s[i] <= '9') 57 nn += (s[i]-48) * pow(10.0,double(k++)); 58 else 59 continue; 60 } 61 return nn; 62 } 63 64 string change_long(long m) 65 { 66 string s = ""; 67 for (long i = 0; i < 7; i++) 68 { 69 long p1 = pow(10.0,double(7-i)); 70 long p2 = pow(10.0,double(6-i)); 71 long c = (m%p1)/p2; 72 s += (c+48); 73 } 74 long k = 0; 75 for (string::iterator it = s.begin(); ;k++,it++) 76 if (k == 3) 77 { 78 s.insert(it,'-'); 79 break; 80 } 81 return s; 82 }
后续工作思考:
(1)数组需要开的足够大,10000000;
(2)可以用快速排序对整数进行排序,采用快排,再统计出现次数。
浙公网安备 33010602011771号