Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<set>
- #include<map>
- #include<list>
- #include<iomanip>
- #include<cmath>
- #include<string>
- #include<vector>
- #include<queue>
- #include<stack>
- #include<complex>
- #include<sstream>
- #include<iostream>
- #include<fstream>
- #include<algorithm>
- #include<numeric>
- #include<utility>
- #include<functional>
- #include<stdio.h>
- #include<assert.h>
- #include<memory.h>
- #include<bitset>
- #include<math.h>
- #define f first
- #define s second
- #define mp make_pair
- #define pb push_back
- #define lp(i,a,n) for(int i=(a);i<=(ll)(n);i++)
- #define lpd(i,a,n) for(int i=(a);i>=(ll)(n);i--)
- #define clr(a) memset(a,0,sizeof a)
- #define all(v) v.begin(),v.end()
- #define println(a) cout <<(a) <<endl
- #define sz(x) ((int)(x).size())
- #define mod 1000000007
- #define eps 1e-6
- #define infi 1e9
- #define infll 1e16
- using namespace std;
- typedef long long ll;
- typedef pair<int, int> pii;
- typedef pair<ll, ll> pll;
- typedef vector<int> vi;
- typedef vector<vi> vvi;
- typedef vector<ll> vll;
- typedef set<int> si;
- typedef map<int, int> mii;
- const ll N = 100005 , UpperBound = 100000000000005ll;
- ll n,k,arr[N];
- int main(int argc, const char * argv[]) {
- scanf("%lld%lld" , &n,&k);
- lp(i, 1, n) scanf("%lld" , &arr[i]) , arr[i] += arr[i-1];
- if(1 == k) {
- printf("%lld\n" , n*(n+1ll)/2);
- return 0;
- }
- ll ans = 0 , b = k;
- k = 1;
- while (abs(k) < UpperBound) {
- if(!b) k = 0;
- map<ll,ll> prev;
- ++prev[0];
- lp(i, 1, n) {
- if(prev.count(arr[i]-k)) ans += prev[arr[i]-k];
- ++prev[arr[i]];
- }
- if(k == 0) break;
- k*=b;
- }
- printf("%lld\n",ans);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement