您的位置:首页 > 其它

POJ 1002 487-3279

2013-09-30 11:46 260 查看
这道题的思路是:

首先利用char map[] = "2223334445556667-77888999-"; //ABCDEFGHIJKLMNOPQRSTUVWXYZ  对数据进行转换,转换之后的数据只包含-和数字,然后去掉字符串中的-,并重新添加上‘-’。最后排序,统计字符串的数据。

#include <iostream>
#include <cstdio>
#include <vector>
#include <string>
#include <functional>
#include <algorithm>
using namespace std;
char map[] = "2223334445556667#77888999#";
//ABCDEFGHIJKLMNOPQRSTUVWXYZ
void visited(char &ch) // visit and format strings
{
if (ch >= 'A' && ch <= 'Z')
ch=map[ch-'A']; // ch equals to its real number
}

void replace_m( string &s)
{
string::iterator it = s.begin();
for (; it != s.end(); it ++)
{
if (*it <='P' && *it >= 'A')
{
*it = '2'+(*it-'A')/3;
}
else if(*it >'P' && *it < 'Z')
{
*it = '7'+(*it-'Q')/3;
}
}
}
int main ()
{
//freopen("1.txt","r",stdin);
int num = 0;
cin >> num;
vector<string> svec;
int cts = 0;
string inpts;
{
while (num --)
{
cin >> inpts;
inpts.erase(remove_if(inpts.begin(),inpts.end(),bind2nd(equal_to<char>(),'-')),inpts.end());
inpts.erase(remove_if(inpts.begin(),inpts.end(),bind2nd(equal_to<char>(),'Q')),inpts.end());
inpts.erase(remove_if(inpts.begin(),inpts.end(),bind2nd(equal_to<char>(),'Z')),inpts.end());
replace_m(inpts);
svec.push_back(inpts);
}
sort (svec.begin(),svec.end());
string ss = *(svec.begin());
vector<string>::iterator it = svec.begin();
++it;
int sct = 1;
int flag = 0;
int tamp = 0;
for (; it != svec.end(); it ++)
{

if (!ss.compare(*it))
{
sct ++;
tamp = 1;
}
else
{
if(sct >=2)
{
ss.insert(3,"-");
flag = 1;
cout << ss <<' ' << sct <<endl;
tamp = 0;
}
sct = 1;
ss = *it;
}
}
if(tamp && sct>=2)
{
ss.insert(3,"-");
flag = 1;
cout << ss <<' ' << sct <<endl;
tamp = 0;
}

if(!flag) cout<<"No duplicates."<<endl;
}
}


这道题木在最后输出的时候,由于统计的时候考虑疏忽,当num=2的时候,出现错误。

                 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: