您的位置:首页 > 其它

PKU 1002 487-3279

2010-01-27 01:05 417 查看
用普通的方法一个一个地计数然后再按字典排序就超时了.用快速排序之后就是字典顺序,并且可以按顺序算出个数.

#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
int w[26]={2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,7,7,0,7,8,8,8,9,9,9,0};

int change(string x)//将数据转化为数字
{
int sum=0;
for(int i=0;x[i]!='/0';i++)
{
if((x[i]>='0')&&(x[i]<='9'))
{
sum=sum*10+x[i]-'0';
}
else if((x[i]>='A')&&(x[i]<='Z'))
{
sum=sum*10+w[x[i]-'A'];
}
}
return sum;
}

int q[100000];
int b[100000];
int c[100000];
int v=1;

int comp(const void *lhs, const void *rhs)
{
return *(int*)lhs - *(int*)rhs;
}

void main()
{
string a;
int i=0;

int m;
cin>>m;for(int k=0;k<m;k++){b[k]=0;c[k]=1;}
for(int l=0;l<m;l++)
{
cin>>a;
q[l]=change(a);
}

qsort(q,m,sizeof(int),comp);//将数字进行快排
for(i=0;i<m;)
{
for(int j=i+1;q[i]==q[j];j++)
{;}
if(j-i>1){v=0;printf("%.3d-%.4d %d/n",q[i] / 10000,q[i] % 10000, j - i);}
i=j;
}
if(v)cout<<"No duplicates.";
}


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