2011-11-25
典型的字符串处理问题。
刚开始用的vector,果断超时。题目本身没什么难度,只在选择容器上要考虑。
AC咯。
#include <iostream>
#include <string>
#include <iomanip>
#include <map>
using namespace std;
int nicknameToNumber(string&);
int main ()
{
int iPhoneTotal;
cin >> iPhoneTotal;
map<int, int> mPhone;
while (iPhoneTotal--)
{
string strTemp;
cin >> strTemp;
++mPhone[nicknameToNumber(strTemp)];
}
int iFlag = 0;
map<int, int>::iterator iter = mPhone.begin();
while (iter != mPhone.end())
{
if (iter->second > 1)
{
iFlag = 1;
cout << setw(3) << setfill('0') << iter->first/10000 << "-" << setw(4) << iter->first%10000 << " " << iter->second << endl;
}
iter++;
}
if (!iFlag)
{
cout << "No duplicates." << endl;
}
return 0;
}
int nicknameToNumber(string& strPhone)
{
int r = 0;
int i = 0;
while (i < strPhone.size())
{
if ('-' == strPhone[i] || 'Q' == strPhone[i] || 'Z' == strPhone[i])
{
}
else if (strPhone[i] >= 'A' && strPhone[i] <= 'P')
{
r = r * 10 + 2 + (strPhone[i] - 'A')/3;
}
else if (strPhone[i] >= 'R' && strPhone[i] <= 'Y')
{
r = r * 10 + 2 + (strPhone[i] - 'A' -1)/3;
}
else if (strPhone[i] <= '9' && strPhone[i] >= '0')
{
r = r * 10 + (strPhone[i] - '0');
}
i++;
}
return r;
}