读书人

hdu 1251统计难点

发布时间: 2012-11-03 10:57:44 作者: rapoo

hdu 1251统计难题

统计难题Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131070/65535 K (Java/Others)
Total Submission(s): 11142 Accepted Submission(s): 4684


Problem DescriptionInputOutputSample InputSample OutputAuthorRecommend#include <iostream>#include <stdio.h>#include <malloc.h>#include <string.h>using namespace std;class num{ public: int flag; num *next[26];};char s1[200];num *statck[100000];int main(){ num *newnode(); void build(char s2[200],num *p); int find(char s2[200],num *p); int i,j,n,m,s,t; num *head; head=newnode(); while(gets(s1)) { if(strlen(s1)==0) { break; } build(s1,head); } while(scanf("%s",s1)!=EOF) { t=find(s1,head); cout<<t<<endl; } return 0;}num *newnode(){ num *p; int i; p=new(num); for(i=0;i<=25;i++) { p->next[i]=NULL; } p->flag=0; return p;}void build(char s2[200],num *p){ int i,j,l,s; l=strlen(s2); for(i=0;i<=l-1;i++) { s=s2[i]-'a'; if(p->next[s]!=NULL) { p=p->next[s]; }else { p->next[s]=newnode(); p=p->next[s]; } } p->flag=1;}int find(char s2[200],num *p){ int i,j,l=strlen(s2); int s,s1,top1,top2; num *p1; for(i=0;i<=l-1;i++) { s=s2[i]-'a'; if(p->next[s]==NULL) { return 0; }else { p=p->next[s]; } } if(p->flag==1) { s=1; }else { s=0; } top1=top2=0; statck[top2++]=p; while(top1<top2) { p=statck[top1++]; for(i=0;i<=25;i++) { p1=p->next[i]; if(p1!=NULL) { statck[top2++]=p1; if(p1->flag==1) { s+=1; } } } } return s;}

读书人网 >编程

热点推荐