Advertisement
yungyao

poj 1190 TLE

May 26th, 2021
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.93 KB | None | 0 0
  1. using namespace std;
  2. #include <vector>
  3. #include <queue>
  4. #include <algorithm>
  5. #include <cmath>
  6. #include <utility>
  7. #include <bitset>
  8. #include <set>
  9. #include <string>
  10. #include <stack>
  11. #include <iomanip>
  12. #include <map>
  13.  
  14. #define pb push_back
  15. #define pii pair<int,int>
  16. #define F first
  17. #define S second
  18. #define LL long long
  19. #define mid (LB+RB)/2
  20.  
  21. const LL maxint64 = (1ll << 63) - 1;
  22. const int maxint32 = (1ll << 31) - 1;
  23.  
  24. //iterators
  25. #define iter(x) x.begin(),x.end()
  26. #define aiter(a,n) a,a+n
  27.  
  28. //loops
  29. #define REP(n) for (int ___=n;___--;)
  30. #define REP0(i,n) for (int i=0;i<n;++i)
  31. #define REP1(i,n) for (int i=1;i<=n;++i)
  32. #define FOR(i,b,l,k) for (int i=b;i!=l;i+=k)
  33. #define forEach(i,v) for (auto i:v)
  34.  
  35. /*
  36. yungyao so weeeeeeeeeeeeeeeeeeeeeeeeeeak
  37. 8e7 so dian
  38. FHVirus so dian
  39. youou so dian
  40. KYW so dian
  41. hubert so dian
  42. jass so dian
  43. tingyu so dian
  44. panda so dian
  45. */
  46.  
  47. //IO
  48. #include <iostream>
  49. #define theyRSOOOOOOOOODIAN ios_base::sync_with_stdio(false),cin.tie(0);
  50. #define endl '\n'
  51.  
  52. //workspace
  53.  
  54. int m;
  55. int hub,rub;
  56.  
  57. inline bool check(int i,LL h,LL r,int n){
  58.     LL k = m - i;
  59.     if (k)
  60.         return (k+1) * r * r * h
  61.         + k * (k+1) * (h*2*(r*6 + k*2 + 1) + r*r*6 + r*4*(k*2+1) + k*3*(k+1)) / 12
  62.         <= n;
  63.     else
  64.         return r * r * h <= n;
  65. }
  66.  
  67. int dfs(int i,int hb,int rb,int nleft){
  68.     int minAns = 1e9;
  69.     for (int h=hb;check(i,h,rb,nleft);++h){
  70.         for (int r=rb;check(i,h,r,nleft);++r){
  71.             if (i == m){
  72.                 if (r*r*h == nleft)
  73.                     minAns = min(minAns,r*(r+h*2));
  74.             }
  75.             else{
  76.                 int dfsResult = dfs(i+1,h+1,r+1,nleft - r*r*h);
  77.                 if (dfsResult)
  78.                     minAns = min(minAns,dfsResult + r*h*2);
  79.             }
  80.         }
  81.     }
  82.     return minAns == 1e9 ? 0 : minAns;
  83. }
  84.  
  85. int main(){
  86.     theyRSOOOOOOOOODIAN
  87.     int n;
  88.  
  89.     cin >> n >> m;
  90.  
  91.     cout << dfs(1,1,1,n);
  92.  
  93.     return 0;
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement