Guest User

SUBSQRMA attempt

a guest
Jun 28th, 2020
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.25 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4.  
  5. // #define sieve_ul int(1e6)
  6. #define endl "\n"
  7. #define mp(x,y) make_pair(x,y)
  8. #define pb(x) push_back(x)
  9.  
  10. // ll sieve_arr[sieve_ul + 10];
  11. // vector<ll> primes;
  12.  
  13. ll fastexp(ll b, ll e)
  14. {
  15.     ll ans = 1;
  16.     ll lpow = b;
  17.  
  18.     while(e)
  19.     {
  20.         if(e & 1)
  21.             ans *= lpow;
  22.         lpow *= lpow;
  23.         e = (e >> 1);
  24.     }
  25.     return ans;
  26. }
  27.  
  28. bool isprime(ll x)
  29. {
  30.     for(ll i=2; i <= sqrt(x); i++)
  31.         if(x%i == 0)
  32.             return false;
  33.     return true;
  34. }
  35.  
  36. // void sieve()
  37. // {
  38. //     primes.clear();
  39. //     memset(sieve_arr, -1, sizeof(sieve_arr));
  40.  
  41. //     for(int i=2; i<= sieve_ul; i++)
  42. //     {
  43. //         if(sieve_arr[i] == -1)
  44. //             for(int j=2; j*i <= sieve_ul; j++)
  45. //                 sieve_arr[i*j] = 1;
  46. //     }
  47.  
  48. //     for(int i=2; i<= sieve_ul; i++)
  49. //         if(sieve_arr[i] == -1)
  50. //             primes.push_back(i);
  51. // }
  52.  
  53.  
  54. void solve()
  55. {
  56.     ll n, x, ps=0;
  57.     cin>>n>>x;
  58.     ll arr[n+1];
  59.  
  60.     for(ll lv=1;lv<=n;lv++)
  61.         cin>>arr[lv];
  62.  
  63.     ll presum[n+1];
  64.     memset(presum, 0, sizeof(presum));
  65.  
  66.     for(ll lv=1;lv<=n;lv++)
  67.     {
  68.         ps += arr[lv];
  69.         presum[lv] = ps;
  70.     }
  71.  
  72.  
  73.     ll ans = 0;
  74.     unordered_map<ll,ll> um;
  75.     vector<ll> dimv;
  76.     dimv.clear();
  77.  
  78.  
  79.     for(ll dim=1; dim*dim <=x;dim++)
  80.         if(x%dim == 0)
  81.         {
  82.             dimv.pb(dim);
  83.             if(fastexp(dim, 2) != x)
  84.                 dimv.pb(x/dim);
  85.         }
  86.  
  87.     for(auto dim:dimv)
  88.     {
  89.         if(dim > n)
  90.             continue;
  91.         // cout<<"\ndim "<<dim<<endl;    
  92.         um.clear();
  93.  
  94.         for(ll di = dim; di <= n; di++)
  95.         {
  96.             ll ls = presum[di] - presum[di - dim];
  97.             if(ls >= x/dim)
  98.                 continue;
  99.             um[ls]++;
  100.         }
  101.  
  102.         for(auto it=um.begin(); it != um.end(); it++)
  103.         {
  104.             if(it->second)
  105.             {
  106.                 ans += (it->second)*um[x/dim - it->first];
  107.             }
  108.         }
  109.     }
  110.  
  111.     cout<<ans;
  112.  
  113. }
  114.  
  115. int main()
  116. {
  117.     ll tc;
  118.     ios_base::sync_with_stdio(false);
  119.     cin.tie(NULL);
  120.     cout.tie(NULL);
  121.     cin>>tc;
  122.  
  123.     while(tc--)
  124.     {
  125.         solve();
  126.         cout<<endl;
  127.     }
  128.  
  129. }
Add Comment
Please, Sign In to add comment