2 wangxiaokal wangxiaokal 于 2013.07.27 10:06 提问

POJ 1002 自测没问题 提交总是wrong answer
poj

#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 %d\n",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;

}

1个回答

wangxiaokal
wangxiaokal   2013.07.27 10:20

就没人看下吗,。。。。。。

Csdn user default icon
上传中...
上传图片
插入图片