Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- ifstream fin("densitate.in");
- ofstream fout("densitate.out");
- int N, a[100005], u, v, P, I;
- double D;
- long long sol;
- int gcd(int a,int b)
- {
- if(a==0)
- return b;
- else
- if(b==0)
- return a;
- if(a<b)
- return gcd(a,b%a);
- else
- return gcd(b,a%b);
- }
- void foo(double input,int &num,int &denum)
- {
- double integral=floor(input);
- double frac=input-integral;
- const int precision=1000000000;
- int gcd_=gcd(round(frac*precision),precision);
- int denominator=precision/gcd_;
- int numerator=round(frac*precision)/gcd_;
- num=numerator;
- denum=denominator;
- }
- long long findSubarraySum(int arr[],int n,int sum)
- {
- unordered_map<long long,long long> prevSum;
- long long res=0;
- long long currsum=0;
- for(int i=1;i<=n;++i)
- {
- currsum+=arr[i];
- if(currsum==sum)
- ++res;
- if(prevSum.find(currsum-sum)!=prevSum.end())
- res+=(prevSum[currsum-sum]);
- ++prevSum[currsum];
- }
- return res;
- }
- int main()
- {
- fin>>N;
- for(int i=1;i<=N;++i)
- fin>>a[i];
- fin>>D;
- foo(D,u,v);
- for(int i=1;i<=N;++i)
- {
- if(a[i]%2)
- a[i]=u;
- else
- a[i]=u-v;
- }
- sol=findSubarraySum(a,N,0);
- fout<<sol;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement