| ||||||||||
| 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 | |||||||||
真不知道为什么会一直WA……看了题目想都没想就想用字典树……
然后敲了以下代码……
WA了一天……
题目给的Sample过了,自己想的样例也过了
可就是一直WA……
T.T
哪位大牛来帮帮忙……
代码如下 :
#include <iostream>
using namespace std;
#include <string.h>
#include <math.h>
static double score=0.0;
char datatmp[5000],data[5000];
typedef struct song
{
int count;
int tmpcount;
struct song *next[35];
} trie;
bool ckvalid(char b)
{
if((b>='a'&&b<='z')||(b>='0'&&b<='9')) return true;
return false;
}
int mp(char g)
{
if(g<='z'&&g>='a') return g-'a';
else return 26+g-'0';
}
void filter()
{
int p=0;
int pp=0;
while(datatmp[p]!='\0')
{
if(datatmp[p]>='A'&&datatmp[p]<='Z') data[pp++]=datatmp[p++]+32;
else if(ckvalid(datatmp[p])||datatmp[p]==' ')
{
data[pp++]=datatmp[p];
p++;
}
else p++;
}
data[pp]='\0';
}
void readln()
{
int p=0;
char t=getchar();
while(t!='\n'&&t!=EOF)
{
datatmp[p++]=t;
t=getchar();
}
datatmp[p]='\0';
filter();
}
trie* datainsert(trie *root,char *wd)
{
trie *tm=root;
if(tm==NULL)
{
tm=new trie;
int i;
tm->count=0;
for(i=0;i<36;i++) tm->next[i]=NULL;
}
if((*wd)=='\0')
{
tm->count++;
return tm;
}
int mpp=mp(*wd);
tm->next[mpp]=datainsert(tm->next[mpp],wd+1);
return tm;
}
void inittrie(trie *root)
{
if(!root) return;
root->tmpcount=0;
int i;
for(i=0;i<36;i++) inittrie(root->next[i]);
return;
}
void counttrie(trie *root)
{
score+=sqrt(((long int)(root->count))*root->tmpcount);
int i;
for(i=0;i<36;i++) if(root->next[i]) counttrie(root->next[i]);
return;
}
void datacountadd(trie *root,char *wd)
{
int p=0;
trie *pt=root;
while(wd[p]!='\0'&&pt)
{
pt=pt->next[mp(wd[p])];
p++;
}
if(pt)
{
pt->tmpcount++;
}
}
int main()
{
trie *hd=new trie;
int h;
hd->count=0;
for(h=0;h<36;h++) hd->next[h]=NULL;
readln();
char tmpwd[5000];
char t;
int p=0;
int pw=0;
while(1)
{
if(data[p]!=' '&&data[p]!='\0') tmpwd[pw++]=data[p];
else
{
if(pw!=0)
{
tmpwd[pw]='\0';
pw=0;
hd=datainsert(hd,tmpwd);
}
}
if(data[p]=='\0') break;
p++;
}
readln();
bool f=true;
while(f)
{
inittrie(hd);
int ttllines=0;
score=0.0;
while(f)
{
readln();
if(!strcmp(datatmp,"----------"))
{
if(ttllines==0) f=false;
break;
}
ttllines++;
p=0;
pw=0;
while(f)
{
if(data[p]!=' '&&data[p]!='\0') tmpwd[pw++]=data[p];
else
{
if(pw!=0)
{
tmpwd[pw]='\0';
pw=0;
datacountadd(hd,tmpwd);
}
}
if(data[p]=='\0') break;
p++;
}
}
counttrie(hd);
printf("%.2f\n",score);
}
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator