Advertisement
Guest User

Untitled

a guest
Apr 6th, 2020
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.86 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. typedef long long ll;
  4. #define endl "\n"
  5. ll Find(int l, int r, int val, vector <ll> &pow)
  6. {
  7.     int ans;
  8.     while(l <= r)
  9.     {
  10.         int mid = (l+r)/2;
  11.         if (pow[mid] <= val)
  12.         {
  13.             ans = mid;
  14.             cout<<pow[mid]<<" "<<val<<" ";
  15.             r = mid - 1;
  16.  
  17.         }
  18.         else
  19.         {
  20.             cout<<pow[mid]<<" "<<val<<" ";
  21.             l = mid + 1;
  22.         }
  23.         cout<<"left = "<<l<<", right = "<<r<<endl;
  24.     }
  25.     return ans;
  26. }
  27.  
  28. int main()
  29. {
  30.     ios_base::sync_with_stdio(false);
  31.     cin.tie(nullptr);
  32.     cout.tie(nullptr);
  33.     int t;
  34.     cin>>t;
  35.     while(t--)
  36.     {
  37.         int n,k;
  38.         cin>>n>>k;
  39.         vector <ll> a(n);
  40.         for (int i = 0; i < n; i++)
  41.             cin>>a[i];
  42.         sort(a.begin(), a.end(), greater<>());
  43.         vector <ll> pow;
  44.         for (ll i = 0, tmp = 1; tmp <= min(a[0],(ll)1e16); i++)
  45.         {
  46.             pow.push_back(tmp);
  47.             tmp *= 1ll * k;
  48.         }
  49.         reverse(pow.begin(), pow.end());
  50.         for (ll l : pow) cout<<l<<" ";
  51.         cout<<endl;
  52.         vector <bool> check(pow.size(), 1);
  53.         int left = 0, right = pow.size() - 1;
  54.         bool flag = true;
  55.         for (int i = 0; i < n && flag; i++)
  56.         {
  57.             while(a[i] > 0)
  58.             {
  59.                 int pos = Find(left, right, a[i], pow);
  60.                 while (pos <= right && check[pos] == 0) pos++;
  61.                 if (pos > right)
  62.                 {
  63.                     flag = false;
  64.                     break;
  65.                 }
  66.                 if (a[i] <= pow[pos] && check[pos] == 1)
  67.                 {
  68.                     a[i] -= pow[pos];
  69.                     check[pos] = 0;
  70.                 }
  71.             }
  72.         }
  73.         if (!flag) cout<<"NO"<<endl;
  74.         else cout<<"YES"<<endl;
  75.     }
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement