2015/3/1
求前缀和
map 存字符串最后一个字符
然后再转一下脑洞。
考你对 程序的 熟悉度。
#include #include #include #include #include #include #include #include #include #include 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 aq[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; }