Codeforces Round #294 (Div. 2) D

来源:互联网 发布:excel分析股票数据 编辑:程序博客网 时间:2024/06/11 09:55

2015/3/1


求前缀和


map 存字符串最后一个字符


然后再转一下脑洞。


考你对 程序的 熟悉度。


#include<map>#include<queue>#include<stack>#include<cmath>#include<vector>#include<climits>#include<stdio.h>#include<string.h>#include<iostream>#include<algorithm>using namespace std;typedef long long ll;  #define mod 10007#define lson pos<<1,l,mid#define sc(n) scanf("%d",&n)#define rson pos<<1|1,mid+1,r#define pr(n) printf("%d\n",n)#define met(n,m) memset(n, m, sizeof(n))#define F(x,y,i) for(int i = x;i > y; i--)#define f(x,y,i) for(int i = x;i < y; i++)#define ff(x,y,i) for(int i = x;i <= y; i++)#define FF(x,y,i) for(int i = x;i >= y; i--) const int N=100500;const int inf = INT_MAX;int Max(int a,int b){    return a>b?a:b;}int Min(int a,int b){    return  a<b?a:b;}__int64 a[30];char s[100005];map<__int64 ,int>q[30];int main()  {      int n, m, tot, x;       while(~scanf("%I64d",&a[0]))    {              f(1,26,i)scanf("%I64d",&a[i]);                scanf("%s",s+1);        int len = strlen(s+1);                __int64 ans = 0;        __int64 num = 0;                f(1,len+1,i)        {            ans += q[s[i]-'a'][num];            num += a[s[i]-'a'];            ++q[s[i]-'a'][num];        }        for(int i = 0;i <30; i++)        q[i].erase(q[i].begin(), q[i].end());        printf("%I64d\n",ans);    }    return 0;  }  






0 0
原创粉丝点击