讨论 / PID245 Log Parser 求找错,样例能过,但是0分
drcool 2014-01-02 06:35:54
点我顶贴 收藏 删除
就是简单的统计加快排,不知为什么错

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <string.h>

char T[15000][1000];

double xz[15000];

int xu[15000];

char mb[16];

double y[16];

int compare( const void *arg1, const void *arg2 )

{

int *A=arg1, *B=arg2;

if(fabs(xz[*A]-xz[*B])<1e-30)

{

return strcmp(T[*A],T[*B]);

}

else

return (xz[*B]-xz[*A]>0);

}

int main()

{

int i,n,j,lenm,x;

scanf("%d\n",&n);

y[0]=1.0/256.0;

for(i=1;i<16;i++) y[i]=2.0*y[i-1];

for(i=0;i<n;i++)

{

gets(T[i]);

xu[i]=i;

}

gets(mb);

lenm=strlen(mb);

if((mb[0]=='i')&&(mb[1]=='s')&&(mb[2]=='t'))

{

for(i=0;i<n;i++)

{

j=0;

while(T[i][j]!=' ')j++;

T[i][j]=0; j++;

while(T[i][j])

{

if((T[i][j]>='0')&&(T[i][j]<='9')&&(T[i][j+1]>='0')&&(T[i][j+1]<='9'))

{

x=(T[i][j]-'0')*10+T[i][j+1]-'0';

xz[i]+=y[x-16];

j+=4;

}

else

j++;

}

}

}

else

{

for(i=0;i<n;i++)

{

j=0;

while(T[i][j]!=' ')j++;

T[i][j]=0; j++;

while(T[i][j])

{

if(!memcmp(&T[i][j],mb,lenm))

{

xz[i]++;

j+=lenm+1;

}

else

j++;

}

}

}

qsort(xu,n,sizeof(int),compare);

for(i=0;i<n;i++)

printf("%s(%d)\n",T[xu[i]],(int)xz[xu[i]]);

}

查看更多回复
提交回复