CPP   65

B-special numbers

Guest on 11th May 2022 11:52:05 PM

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. long long maxnum = 1e10+1;
  4. vector<vector<int>> cases = {{3,5},{3,7},{5,7}};
  5. vector<unsigned long long> P_ans;
  6. unordered_map<unsigned long long,int>mp;
  7. void cal (){
  8.         for(int i = 0; i<3 ; i++){
  9.                 for(int j = 1; j<=20 ; j++){
  10.                         for(int k = 1; k<=20; k++){
  11.  
  12.                                 unsigned long long p1  = (unsigned long long)pow(cases[i][0],j);
  13.                                 unsigned long long p2  = (unsigned long long)pow(cases[i][1],k);
  14.                                 if(mp.find(p1+p2)==mp.end())P_ans.push_back(p1+p2);
  15.                 mp[p1+p2] = 1;
  16.                         }
  17.                 }
  18.         }
  19. }
  20. void solve(){
  21.         unsigned long long N , D, I;
  22.         cin>>N>>D>>I;
  23.         sort(P_ans.begin(),P_ans.end());
  24.     long long hi = P_ans.size() , lo = 0, mid = 0;
  25.     while(lo<hi){
  26.         mid = lo +(hi-lo)/2;
  27.         if(P_ans[mid]==N){
  28.             cout<<0<<endl;
  29.             return;
  30.         }
  31.         if(P_ans[mid]<N) {
  32.             lo = mid+1;
  33.         }
  34.         else hi = mid;
  35.     }
  36.     unsigned long long cost = LONG_MAX,cost1,cost2;
  37.     //cout<<lo<<" lo"<<endl;
  38.  
  39.     if(lo==0){
  40.         if(P_ans[lo]<N){
  41.             cost = min((N-P_ans[lo])*D,cost);
  42.         }
  43.         else {
  44.             cost = min(cost,(P_ans[lo]-N)*I);
  45.         }
  46.     }
  47.     else {
  48.         cost = min((N-P_ans[lo-1])*D,cost);
  49.         if(P_ans[lo]>N){
  50.             cost = min(cost,(P_ans[lo]-N)*I);
  51.         }
  52.         else if(P_ans[lo]<N){
  53.             cost = min(cost,(N-P_ans[lo])*D);
  54.         }
  55.  
  56.     }
  57.     //cost = cost% (long)(1e9+7);
  58.     cout<<cost<<endl;
  59.  
  60.     // for(int i = 0;i<P_ans.size();i++){
  61.     //     cout<<P_ans[i]<<" ";
  62.     // }
  63.        
  64. }
  65. int main() {
  66.         long t;
  67.     cal();
  68.         cin>>t;
  69.         while(t--) {
  70.                 solve();
  71.         }
  72.         return 0;
  73. }

Raw Paste


Login or Register to edit or fork this paste. It's free.