POJ 1002 487-3279_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > POJ 1002 487-3279

POJ 1002 487-3279

 2011/11/29 10:15:03  ysshuai19  http://ysshuai19.iteye.com  我要评论(0)
  • 摘要:2011-11-25典型的字符串处理问题。刚开始用的vector,果断超时。题目本身没什么难度,只在选择容器上要考虑。AC咯。#include<iostream>#include<string>#include<iomanip>#include<map>usingnamespacestd;intnicknameToNumber(string&);intmain(){intiPhoneTotal;cin>>iPhoneTotal
  • 标签:

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;
}






?
  • 相关文章
发表评论
用户名: 匿名