Advertisement
Guest User

Untitled

a guest
Jan 26th, 2015
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.27 KB | None | 0 0
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <cstdio>
  4. #include <vector>
  5. #include <cstring>
  6. #include <string>
  7. #include <cmath>
  8. #include <utility>
  9. #include <map>
  10. #include <set>
  11. #include <queue>
  12. #include <stack>
  13. #include <sstream>
  14. #define fr(a,b,c) for (int a=b;a<=c;a++)
  15. #define frr(a,b,c) for (int a=b;a>=c;a--)
  16. #define rep(a,b) for (int a=0;a<b;a++)
  17. #define repp(a,b) for (int a=b-1;a>=0;a--)
  18. #define pb push_back
  19. #define mp make_pair
  20. #define fi first
  21. #define se second
  22. #define sz(a) int(a.size())
  23. #define all(a) a.begin(),a.end()
  24. #define reset(a,b) memset(a,b,sizeof(a))
  25. #define pii pair<int,int>
  26. #define oo 1LL<<60
  27. #define maxN 1
  28. using namespace std;
  29.  
  30. struct RectangularSum
  31. {
  32.     long long att(int h,int w,long long S,int H,int W)
  33.     {
  34.         long long u = S*4/h/w - 2LL*W*(h-1) + 2 - 2*w;
  35.         if (u%4 || u<0) return oo;
  36.         u/=4;
  37.         return u/W + h <= H && u%W + w <= W ? 1LL*w*h : oo;
  38.     }
  39.    
  40.     long long minimalArea(int height, int width, long long S)
  41.     {
  42.         long long ans=oo;
  43.        
  44.         vector <int> listW;
  45.         for (int i=1;i<=width;i++)
  46.             if (S*4%i==0) listW.push_back(i);
  47.        
  48.         fr(h,1,height)
  49.             if (S*4%h==0)
  50.                 for (int i=0;i<listW.size();i++)
  51.                     if (S*4/h%listW[i]==0)
  52.                         ans=min(ans,att(h,listW[i],S,height,width));
  53.                    
  54.         return ans==oo?-1:ans;
  55.     }
  56. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement