问题描述
- POJ 1002 自测没问题 提交总是wrong answer
-
#include
#include
#include#define type int
char transfer[26]={2,2,2,
3,3,3,
4,4,4,
5,5,5,
6,6,6,
7,7,7,7,
8,8,8,
9,9,9,9};typedef struct repeat
{
char num[8];
struct repeat * next;
}RPT;void std(char * in,char *out)
{
int i,j=0;
char c;
out[7]=0;
for(i=0;i
{
while(in[j]=='-')j++;
c=in[j++];
if(c>=65)
{
out[i]=transfer[c-65];
}
else
{
out[i]=c-48;
}
}return;
}
int strcasecmp(char * s1,char *s2)
{
int i=0;
while(s1[i])
{
if(s1[i]>s2[i])return 1;
else if(s1[i]<s2[i]) return -1;
i++;
}
if(s2[i]==0)return 0;
else return -1;
}int main(void)
{
RPT * rhead;
short intbytes;type *******head=NULL;//相当于trie树的东西 type * p; RPT *rp,*tmprp,*tmprp1; int n,i,j,count; char unstd[20]; char stdn[9]; intbytes=sizeof(type)*10; head=(type*******)malloc(intbytes); memset((void*)head,0,intbytes); rp=rhead=(RPT*)malloc(sizeof(RPT)); rp->num[0]=0; rp->next=NULL; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%s",unstd); std(unstd,stdn); //1234567出现的次数存放在head[1][2][3][4][5][6][7]里面 p=(type*)head; for(j=0;j<6;j++) { if(0==p[stdn[j]]) { p[stdn[j]]=(type)malloc(intbytes); memset((void*)p[stdn[j]],0,intbytes); } p=(type*)p[stdn[j]]; } count=++p[stdn[6]]; //如果count==2,则需要在repeat裢表中创建一个结点 if(count==2) { rp=(RPT*)malloc(sizeof(RPT)); memcpy(rp->num,stdn,8); //将rp结点按字典顺序插入repeat裢表中 tmprp1=rhead; tmprp=rhead->next; while(tmprp) { if(strcasecmp(rp->num,tmprp->num)>0) { tmprp1=tmprp; tmprp=tmprp->next; } else { break; } } rp->next=tmprp1->next; tmprp1->next=rp; } } rp=rhead->next; if(rp==NULL) { printf("No duplicates.n"); } else { while(rp) { memcpy(stdn,rp->num,8); printf("%d%d%d-%d%d%d%d %dn",rp->num[0],rp->num[1],rp->num[2],rp->num[3],rp->num[4],rp->num[5],rp->num[6],head[stdn[0]][stdn[1]][stdn[2]][stdn[3]][stdn[4]][stdn[5]][stdn[6]]); rp=rp->next; } } return 0;
}
解决方案
就没人看下吗,。。。。。。