//最贵的贝壳
#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=strlen(text);
int p_size=strlen(pat);
int i=p_size-1;
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]];
}
}
count=j--;
}
int main()
{
// char text[100]="12345566777891234123789 =789 23451234789 7899";
// char pat[10]={'7','8','9'};
ifstream cin("bei.in");
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];
}
int m;
cin>>m;
for(int i=0;i<m;i++)
{
cin>>love[i];
}
int count=0;
pipei(cost.cs,love,count);//text,pat,count);//
for(int i=0;i<m;i++)
{
sum+=cost.data[count];
count++;
}
if(!count)
{
return -1;
cout<<"error"<<endl;
}
else
{
cout<<sum<<endl;//sum<<endl;
return 0;
}
}
/**/
/*
#include<fstream>
#include<iostream>
#include<cstring>
using namespace std;
typedef struct
{
int data[100];
char cs[100];
}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=strlen(text);
int p_size=strlen(pat);
int i=p_size-1;
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]];
}
}
count=j--;
}
int main()
{
ifstream cin("bei.in");
int n;
char love[100];
cost cost;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>cost.data[i];
}
for(int i=0;i<n;i++)
{
cin>>cost.cs[i];
}
int m;
cin>>m;
for(int i=0;i<m;i++)
{
cin>>love[i];
}
for(int i=0;i<n;i++)
{
cout<<"("<<cost.data[i]<<","<<cost.cs[i]<<")";
}
cout<<endl;
for(int i=0;i<m;i++)
{
cout<<love[i]<<" ";
}
int count=0;
pipei(cost.cs,love,count);
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