Codeforces Round #400 C. Molly's Chemicals(前缀和)

来源:互联网 发布:拳皇14出招优化补丁 编辑:程序博客网 时间:2024/05/17 03:39

题意:给定n个数字和一个k,问区间的一段数字加起来是k的幂的区间数。


思路:对n个数求前缀和,记录下前缀和的种数(即前缀中能得到值s的种数),然后对每个k的幂(power)求sum-

power的和。在其前缀中有多少种方式组成sum-power,那么当前就能多少种power。


代码:

#include<bits/stdc++.h>using namespace std;const int maxn = 1e5+5;typedef long long ll;int a[maxn], n, k;map<ll, int> m;int main(void){    while(cin >> n >> k)    {        for(int i = 0; i < n; i++)            scanf("%d", &a[i]);        ll p = 1, sum, ans = 0;        while(abs(p) < 1e15)        {            m.clear();            m[0] = 1;            sum = 0;            for(int i = 0; i < n; i++)            {                sum += a[i];                ans += m[sum-p];                m[sum]++;            }            p *= k;        }        printf("%I64d", ans);    }    return 0;}


阅读全文
0 0
原创粉丝点击