Codefources 519D. A and B and Interesting Substrings
来源:程序员人生 发布时间:2015-03-28 08:39:50 阅读次数:3458次
/* ***********************************************
Author :CKboss
Created Time :2015年03月05日 星期4 16时32分55秒
File Name :D_.cpp
************************************************ */
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <string>
#include <cmath>
#include <cstdlib>
#include <vector>
#include <queue>
#include <set>
#include <map>
using namespace std;
typedef long long int LL;
const int maxn=100100;
int n;
LL val[30],presum[maxn];
char str[maxn];
map<LL,int> G[30];
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
for(int i=0;i<26;i++) cin>>val[i];
cin>>str;
n=strlen(str);
for(int i=0;i<n;i++)
{
if(i==0) presum[0]=val[str[i]-'a'];
else presum[i]=presum[i⑴]+val[str[i]-'a'];
}
LL ans=0;
G[str[0]-'a'][val[str[0]-'a']]++;
for(int i=1;i<n;i++)
{
int c=str[i]-'a';
LL pn=presum[i⑴]; LL pr=presum[i];
ans+=G[c][pn];
G[c][pr]++;
}
cout<<ans<<endl;
return 0;
}
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠