| ||||||||||
| 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 | |||||||||
超时问题我提交的程序总是超时,请诸位指教如何提高程序效率。谢谢。
源代码如下:
#include <stdio.h>
#include <string.h>
struct TELITEM
{
char tel[8];
int num;
TELITEM* pNext;
};
void inline standard(char longtel[], char stdtel[])
{
int tellen = strlen(longtel);
int stdindex = 0;
for(int subindex=0; subindex<tellen; subindex++)
{
char dig = longtel[subindex];
if(dig>='0' && dig<='9')
{
stdtel[stdindex] = dig;
stdindex++;
}
else if(dig>='A' && dig<='O')
{
stdtel[stdindex] = '2'+(dig-'A')/3;
stdindex++;
}
else if(dig=='P')
{
stdtel[stdindex] = '7';
stdindex++;
}
else if(dig>='R' && dig<='Y')
{
stdtel[stdindex] = '7'+(dig-'Q')/3;
stdindex++;
}
}
stdtel[stdindex] = 0;
}
void inline compare(TELITEM*& telnums, int& count, char tel[])
{
TELITEM* p = telnums;
TELITEM* q = NULL;
while(p && strcmp(p->tel, tel)<0)
{
q = p;
p = p->pNext;
}
if(!p || strcmp(p->tel, tel)>0)
{
count++;
TELITEM* pNew = new TELITEM;
pNew->num = 1;
strcpy(pNew->tel, tel);
pNew->pNext = p;
q?q->pNext = pNew:telnums=pNew;
}
else
{
p->num++;
}
}
void inline printtel(TELITEM* telnums, int count)
{
bool dup = false;
TELITEM* p = telnums;
while(p)
{
if(p->num>1)
{
dup = true;
for(int subidx = 0; subidx<3; subidx++)
printf("%c", p->tel[subidx]);
printf("-");
for(subidx=3; subidx<7; subidx++)
printf("%c", p->tel[subidx]);
printf(" %d\n", p->num);
}
p = p->pNext;
}
if(!dup)
printf("No duplicates.\n");
}
void main()
{
TELITEM* pTels = NULL;
int count = 0;
int total;
scanf("%ud", &total);
for(int index=0; index<total; index++)
{
char temptel[255];
scanf("%s", temptel);
char tel[8];
standard(temptel, tel);
compare(pTels, count, tel);
}
printtel(pTels, count);
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator