Advertisement
a53

densitate1

a53
Jun 6th, 2019
289
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.37 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. ifstream fin("densitate.in");
  4. ofstream fout("densitate.out");
  5. int N, a[100005], u, v, P, I;
  6. double D;
  7. long long sol;
  8.  
  9. int gcd(int a,int b)
  10. {
  11. if(a==0)
  12. return b;
  13. else
  14. if(b==0)
  15. return a;
  16. if(a<b)
  17. return gcd(a,b%a);
  18. else
  19. return gcd(b,a%b);
  20. }
  21.  
  22. void foo(double input,int &num,int &denum)
  23. {
  24. double integral=floor(input);
  25. double frac=input-integral;
  26. const int precision=1000000000;
  27. int gcd_=gcd(round(frac*precision),precision);
  28. int denominator=precision/gcd_;
  29. int numerator=round(frac*precision)/gcd_;
  30.  
  31. num=numerator;
  32. denum=denominator;
  33. }
  34.  
  35. long long findSubarraySum(int arr[],int n,int sum)
  36. {
  37. unordered_map<long long,long long> prevSum;
  38. long long res=0;
  39. long long currsum=0;
  40. for(int i=1;i<=n;++i)
  41. {
  42. currsum+=arr[i];
  43. if(currsum==sum)
  44. ++res;
  45. if(prevSum.find(currsum-sum)!=prevSum.end())
  46. res+=(prevSum[currsum-sum]);
  47. ++prevSum[currsum];
  48. }
  49. return res;
  50. }
  51.  
  52. int main()
  53. {
  54. fin>>N;
  55. for(int i=1;i<=N;++i)
  56. fin>>a[i];
  57. fin>>D;
  58. foo(D,u,v);
  59. for(int i=1;i<=N;++i)
  60. {
  61. if(a[i]%2)
  62. a[i]=u;
  63. else
  64. a[i]=u-v;
  65. }
  66. sol=findSubarraySum(a,N,0);
  67. fout<<sol;
  68. return 0;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement