//最贵的贝壳
#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