CodeForces - 776C(前缀和+思维)
题意:给出数组 a[n] ,问有多少个区间和等于 k^x(x >= 0)。
题解:求前缀和,标记每个和的个数。对每一个数都遍历到1e5,记录到答案。
#include <bits/stdc++.h> using namespace std; long long n, k; map<long long, long long> mp; int main() { scanf("%lld%lld", &n, &k); mp[0] = 1; long long ans = 0, s = 0; for(long long i = 0, a; i < n; i++){ scanf("%lld", &a); s += a; if(k == 1) ans += mp[s-1]; else if(k == -1) ans += mp[s-1] + mp[s+1]; else{ long long t = 1; while(abs(t) <= 1e15){ ans += mp[s-t]; t *= k; } } mp[s]++; } printf("%lld\n", ans); return 0; }