/*
由于电话号码的数字在int范围内,所以采用了查表并且采用将电话号码
转换为数字进行排序。
*/
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<string>
#include<map>
#include<vector>
using namespace std;
int m[]=
{
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()
{
ios::sync_with_stdio(false);cin.tie(0);
int n;
int num;
int a[100004];
char s[1025]; //字符串数组开小了会TLE 第一次见这种问题。
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
{
num=0;
scanf("%s",s);
for(int j=0;s[j];j++)
if(isalpha(s[j]))
num=num*10+m[s[j]-'A'];
else if(isdigit(s[j]))
num=num*10+s[j]-'0';
a[i]=num;
}
sort(a,a+n);
int cnt=1;
int flag=1;
for(int i=0;i<n;i++)
{
if(a[i]==a[i+1])
cnt++;
else if(cnt!=1)
{
printf("%03d-%04d %d\n",a[i]/10000,a[i]%10000,cnt);
cnt=1;
flag=0;
}
}
if(cnt!=1)
{
printf("%03d-%04d %d\n",a[n-1]/10000,a[n-1]%10000,cnt);
flag=0;
}
if(flag)
printf("No duplicates.\n");
}
return 0;
}
POJ 1002(打表+排序)
最新推荐文章于 2019-01-14 22:10:44 发布