| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
这道题有什么好的办法没有?我先将号码一个个读进来,由于号码是7位,于是我在堆中申请了1000*10000的数组,初始化为0,每读入一个号码in,就ar[in]++,最后从1到999-9999读ar数组,若起位置值大于一就打印```
用时570ms。
问有更好的办法没有?
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int ar[10000000];
int str[128]={0};
int num;
int in;
void input(const int y)
{
int i=0;
char c;
in = 0;
while (i<7)
{
c = getchar();
switch (c)
{
case '-':
break;
case '\n':
break;
default:
in *= 10;
in += str[(int)c];
i++;
break;
}
}
}
char tmp[10][5] = {"0","1","ABC2","DEF3","GHI4","JKL5","MNO6","PRS7","TUV8","WXY9"};
void ini()
{
int i,j;
for (i=0;i<10;i++)
for (j=0;tmp[i][j];j++)
str[(int)tmp[i][j]] = i;
}
void solve_one()
{
memset(ar,0,sizeof(ar));
int i,k;
for (i=0;i<num;i++)
{
input(i);
ar[in]++;
printf("ans:%d",ar[in]);
}
for (i=0,k=0;i<10000000;i++)
{
if (ar[i]>1)
{
k++;
printf("%03d-%04d %d\n",i/10000,i%10000,ar[i]);
}
}
if (k == 0)puts("No duplicates.");
}
int main()
{
ini();
while (scanf("%d",&num)==1)
solve_one();
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator