您的位置:首页 > 其它

终于用horspool算法把题目做出来了,可惜那个系统却说超时了,真想不能,有这么好的算法,还超时。

2010-04-14 21:51 309 查看
//最贵的贝壳

#include<iostream>

#include<fstream>

#include<cstring>

#define MAXN 1020

#define MAXM 120

using namespace std;

typedef struct

{

int data[MAXN];

char cs[MAXN];

}cost;

int *b_table(char pat[],int p_size)

{

static int word_tab[130];

int i_size=p_size;

for(int i=0;i<128;i++)

{

word_tab[i]=p_size;

}

i_size--;

for(int i=0;i!=p_size-1;i++)

{

word_tab[(int)pat[i]]=i_size;

i_size--;

}

// cout<<i_size<<endl;

return word_tab;

}

void pipei(char text[],char pat[],int &count,int t_size,int p_size)

{

// int t_size=strlen(text);

// int p_size=strlen(pat);

int i=p_size-1;

// cout<<i<<endl;

int *table=b_table(pat,p_size);

// cout<<table[1]<<endl;

int num[100];

int j=0;

while(i<t_size)//==

{

int mat_i=0;

while(mat_i<p_size&&text[i-mat_i]==pat[p_size-mat_i-1])

{

mat_i++;

}

if(mat_i==p_size)

{

num[j]=i-p_size+1;

// cout<<num[j]<<" ";

j++;

i++;

}

else

{

i+=table[(int)text[i]];

}

}

j--;

count=num[j];

}

int main()

{

// char text[100]="12345566777891234123789 =789 23451234789 7899";

// char pat[10]={'7','8','9'};

//ifstream cin("bei.in");

int cot;

char love[100];

int n;

cost cost;

int sum=0;

cin>>n;

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

{

cin>>cost.data[i];

}

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

{

cin>>cost.cs[i];

}

// cout<<cost.cs[0]<<endl;

int m;

cin>>m;

int i;

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

{

cin>>love[i];

}

// cout<<m<<endl;

// int count=0;

// int c_len=strlen(cost.cs);

// int l_len=strlen(love);

// cout<<c_len<<endl<<l_len<<endl;

// cout<<n<<" "<<m<<endl;

pipei(cost.cs,love,cot,n,m);//text,pat,count);//

// cout<<"|"<<cot<<endl;

for(int i=0;i<m;i++)

{

sum+=cost.data[cot];

cot++;

}

if(!cot)

{

return -1;

cout<<"error"<<endl;

}

else

{

cout<<sum<<endl;//sum<<endl;

return 0;

}

}

bei.in:

23

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

ILOVEUIDONOTLOVEUILOVEU

5

LOVEU
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐