D. A and B and Interesting Substrings
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

A and B are preparing themselves for programming contests.

After several years of doing sports programming and solving many problems that require calculating all sorts of abstract objects, A and B also developed rather peculiar tastes.

A likes lowercase letters of the Latin alphabet. He has assigned to each letter a number that shows how much he likes that letter (he has assigned negative numbers to the letters he dislikes).

B likes substrings. He especially likes the ones that start and end with the same letter (their length must exceed one).

Also, A and B have a string s. Now they are trying to find out how many substrings t of a string s are interesting to B (that is, t starts and ends with the same letter and its length is larger than one), and also the sum of values of all letters (assigned by A), except for the first and the last one is equal to zero.

Naturally, A and B have quickly found the number of substrings t that are interesting to them. Can you do it?

Input

The first line contains 26 integers xa, xb, ..., xz ( - 105 ≤ xi ≤ 105) — the value assigned to letters a, b, c, ..., z respectively.

The second line contains string s of length between 1 and 105 characters, consisting of Lating lowercase letters— the string for which you need to calculate the answer.

Output

Print the answer to the problem.

Sample test(s)
Input
1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 7 1 1 1 8 1 1 1 1 1 1
xabcab
Output
2
Input
1 1 -1 1 1 1 1 1 1 1 1 1 1 1 1 7 1 1 1 8 1 1 1 1 1 1
aaa
Output
2
Note

In the first sample test strings satisfying the condition above are abca and bcab.

In the second sample test strings satisfying the condition above are two occurences of aa.

题意:每一个字符都有一个权值,让你用O(n)的算法找到满足以下条件的子串个数

1.首位和末尾字母相同

2.除去首位和末尾的权值等于0

题解:我们只要找到该位置之前有多少个和这个位置有相同字母,且权值相同的位置就好

用一个map<ll,ll>就好,表示到第i个字母的时候,取得的和为j的个数有多少个

//qscqesze
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define maxn 100001
#define eps 1e-9
const int inf=0x7fffffff; //无限大
int main()
{
ll ans=;
map<ll,ll> kiss[];
int point[];
for(int i=;i<;i++)
{
cin>>point[i];
}
string s;
cin>>s;
ll sum=;
for(int i=;i<s.size();i++)
{
ans+=kiss[s[i]-'a'][sum];
sum+=point[s[i]-'a'];
kiss[s[i]-'a'][sum]++;
}
cout<<ans<<endl;
}

最新文章

  1. 解决mysql插入数据时出现Incorrect string value: &#39;\xF0\x9F...&#39; for column &#39;name&#39; at row 1的异常
  2. 正确解读free -m
  3. 在Mac上开启自带的Apache,httpd服务
  4. ionic导航之后返回功能的说明
  5. 什么是锚点(AnchorPoint)
  6. 7 天玩转 ASP.NET MVC — 第 5 天
  7. DateTimePicker:jQuery日期和时间插件
  8. RBAC - 基于角色的权限控制
  9. UE4上传图片到服务器
  10. js 各进制前缀 及 转换
  11. R语言︱ 数据库SQL-R连接与SQL语句执行(RODBC、sqldf包)
  12. HBase表创建、删除、清空
  13. Linux基础命令第二天
  14. Odoo 堆积木似的软件构建
  15. PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树
  16. 算法入门及其C++实现
  17. zookeeper 快速入门
  18. Java SimpleDateFormat对象的parse方法处理12点变成00点
  19. 20155322 《Java程序设计》课堂实践项目MyOD
  20. [置顶] kubernetes资源类型--pod和job

热门文章

  1. 关于mysql的wait_timeout参数 设置不生效的问题【转】
  2. 【前端vue开发】vue子调父 $emit (把子组件的数据传给父组件)
  3. centos7上安装指定版本gitlab
  4. 2.SpringBoot之返回json数据
  5. MongoDB中多表关联查询(
  6. 区间DP小结
  7. 洛谷P1331 海战 题解
  8. 30 最小的k个数
  9. CF455D. Serega and Fun
  10. 关于C语言的几个考试编程题目