Codeforces Round #294 (Div. 2) (D)前缀和+map
来源:互联网 发布:linux 不保存退出 编辑:程序博客网 时间:2024/06/05 00:37
题意:给你一个数组,每个数字是对应位置的字母权值,接下来有一个字符串,问在这个字符串是否能找到符合以下条件的子串
1.长度>=2
2.除去首位,末位,子串的权值和等于0
问可以在这个字符串里找到多少个 符合条件的子串
题解:开始是想到使用前缀和维护区间的和,使用尺取法 枚举区间,但是发现找不到条件促使“尺子移动”,这里我发现只有前缀和减少才会有机会使得子串的权值和为0。可是这样去枚举复杂度实在太高,查了题解规律是:若当前的字符相同,而且前缀和相同那么这个区间的权值和就是0,也就是满足题意的,因为和很大,这里可以使用map维护,这里的和其实是从相同的前缀和的N个点中选取2个,组合数学ans+=C(N,2);
#include <set>#include <map>#include <list> #include <cmath> #include <queue> #include <vector>#include <cstdio> #include <string> #include <cstring>#include <iomanip> #include <iostream> #include <sstream>#include <algorithm>#define LL long long using namespace std;#define N 100005int a[N];char s[N];LL prifix[N];map<LL,LL>q[200];int main(){#ifdef CDZSCfreopen("i.txt","r",stdin);#endifwhile(~scanf("%d",&a['a'])){memset(prifix,0,sizeof(prifix));prifix[0]=0;for(int i='b';i<='z';i++){q[i].clear();scanf("%d",&a[i]);}scanf("%s",s+1);for(int i=1;s[i];i++){prifix[i]+=prifix[i-1]+a[s[i]];}LL ans=0;for(int i=1;s[i];i++){ans+=q[s[i]][prifix[i-1]];q[s[i]][prifix[i]]++;}printf("%I64d\n",ans);}return 0;}
0 0
- Codeforces Round #294 (Div. 2) (D)前缀和+map
- Codeforces Round #294 (Div. 2) D. A and B and Interesting Substrings(前缀和+map)
- Codeforces Round #345 (Div. 2) D. Image Preview 前缀和
- Codeforces Round #376 (Div. 2)F(前缀和,模拟)
- Codeforces Round #427 (Div. 2) C (前缀和思想)
- Codeforces Round #378 (Div. 2)D(MAP)
- Codeforces Round #339 (Div. 2) D .Skills 偷师一波前缀和的运用
- Codeforces Round #247(Div. 2) D. Random Task 二分+前缀和
- Codeforces Round #381 (Div. 2) D. Alyona and a tree 树型前缀和+二分维护
- Codeforces Round #344 (Div. 2)-A. Interview(前缀和)
- Codeforces Round #365 (Div. 2) B前缀和
- Codeforces Round #448 (Div. 2) A. Pizza Separation 前缀和
- Codeforces Round #320 (Div. 2) [Bayan Thanks-Round] D 前缀后缀维护
- Codeforces Round #294 (Div. 2) D
- codeforces Round # 187(Div.2) D
- Codeforces Round #277 (Div. 2)(D)
- Codeforces Round #291 (Div. 2)(D)
- Codeforces Round #294 (Div. 2) D (模拟)
- PAT (Basic Level)1005.继续(3n+1)猜想
- hdu2196 computer dfs 树形dp
- Android性能优化之三级缓存
- arm9+linux s3c2440 led 驱动s3c_led.c 解析及运行过程
- 【 bzoj 3509 】[CodeChef] COUNTARI - 分块FFT
- Codeforces Round #294 (Div. 2) (D)前缀和+map
- jQuery 前台注册验证!
- 【English】口语积淀,我们需要——Repetition
- 成功不是准备好的,而是一步步的
- 慢慢来比较快
- 迅雷云监工crysadm搭建
- PAT (Basic Level)1006. 换个格式输出整数
- COCOS学习笔记--骨骼动画
- 简单的Java单元测试框架