Monday, December 10, 2018

[toph.co] Help Optimus!

Author            : Dipu Kumar Mohanto 
                    CSE, Batch - 6
                    BRUR.
Problem Statement : Help Optimus!
Source            : toph.co
Category          : Search
Algorithm         : Ternary Search
Verdict           : Accepted
  1. #include <bits/stdc++.h>  
  2.    
  3. using namespace std;  
  4.    
  5. #define ll long long  
  6.    
  7. ll D, F, L, K;  
  8.    
  9. inline ll f(ll d)  
  10. {  
  11.       ll ans = d*K - (D+F)*d*d + L;  
  12.       return ans;  
  13. }  
  14.    
  15. inline ll ternarySearch()  
  16. {  
  17.       ll lo = 1;  
  18.       ll hi = 1e6;  
  19.       while (true)  
  20.       {  
  21.             if (hi-lo < 3)  
  22.             {  
  23.                   ll max_1 = f(lo);  
  24.                   ll max_2 = f(lo+1);  
  25.                   ll max_3 = f(hi);  
  26.                   ll maxi = max(max_1, max(max_2, max_3));  
  27.                   if (maxi == max_1)  return lo;  
  28.                   if (maxi == max_2)  return lo+1;  
  29.                   if (maxi == max_3)  return hi;  
  30.             }  
  31.             ll mid1 = lo + (hi-lo)/3;  
  32.             ll mid2 = hi - (hi-lo)/3;  
  33.             if (f(mid1) < f(mid2)) lo = mid1;  
  34.             else hi = mid2;  
  35.       }  
  36. }  
  37.    
  38. int main()  
  39. {  
  40.       //freopen("in.txt", "r", stdin);  
  41.    
  42.       int tc;  
  43.       scanf("%d", &tc);  
  44.       for (int tcase = 1; tcase <= tc; tcase++)  
  45.       {  
  46.             scanf("%lld %lld %lld %lld", &D, &F, &L, &K);  
  47.             ll ans = solve();  
  48.             printf("%lld\n", ans);  
  49.       }  
  50. }  
  51.    

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.