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 |
那我就不知了,我也想不通为什么会MLE,TLE,我发一下程序,帮我看看怎么优化In Reply To:他们现在过的都是用什么过的? Posted by:hawk at 2004-07-26 18:32:35 #include<stdio.h> #include<string.h> #include<malloc.h> #define MULTIPLIER 31 #define NHASH 30000 int a,b; unsigned int hash(char *str) { unsigned int h; unsigned char *p; h=0; for(p=(unsigned char *)str;*p!='\0';p++) h=MULTIPLIER*h+*p; return h%NHASH; } typedef struct Nameval Nameval; struct Nameval { char *name; Nameval *next; }; Nameval *symtab[NHASH]; int lookup(char *name) { int h; char *p; Nameval *sym; h=hash(name); for(sym=symtab[h];sym!=NULL;sym=sym->next) if(strcmp(name,sym->name)==0) return 1; p=(char *)malloc(a+1); strcpy(p,name); sym=(Nameval *)malloc(sizeof(Nameval)); sym->name=p; sym->next=symtab[h]; symtab[h]=sym; return 0; } int main() { int i; long sum=0; char word,*p,*q; scanf("%d%d",&a,&b); getchar(); p=(char *)malloc(a+1); for(i=1;i<a;i++) *(p+i)=getchar(); while(scanf("%c",&word)!=EOF&&word!=10) { for(i=0;i<a-1;i++) *(p+i)=*(p+i+1); *(p+a-1)=word; *(p+a)='\0'; if(lookup(p)==0) sum++; } printf("%ld\n",sum); } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator