Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <algorithm>
- #include <cstdio>
- #include <vector>
- #include <cstring>
- #include <string>
- #include <cmath>
- #include <utility>
- #include <map>
- #include <set>
- #include <queue>
- #include <stack>
- #include <sstream>
- #define fr(a,b,c) for (int a=b;a<=c;a++)
- #define frr(a,b,c) for (int a=b;a>=c;a--)
- #define rep(a,b) for (int a=0;a<b;a++)
- #define repp(a,b) for (int a=b-1;a>=0;a--)
- #define pb push_back
- #define mp make_pair
- #define fi first
- #define se second
- #define sz(a) int(a.size())
- #define all(a) a.begin(),a.end()
- #define reset(a,b) memset(a,b,sizeof(a))
- #define pii pair<int,int>
- #define oo 1LL<<60
- #define maxN 1
- using namespace std;
- struct RectangularSum
- {
- long long att(int h,int w,long long S,int H,int W)
- {
- long long u = S*4/h/w - 2LL*W*(h-1) + 2 - 2*w;
- if (u%4 || u<0) return oo;
- u/=4;
- return u/W + h <= H && u%W + w <= W ? 1LL*w*h : oo;
- }
- long long minimalArea(int height, int width, long long S)
- {
- long long ans=oo;
- vector <int> listW;
- for (int i=1;i<=width;i++)
- if (S*4%i==0) listW.push_back(i);
- fr(h,1,height)
- if (S*4%h==0)
- for (int i=0;i<listW.size();i++)
- if (S*4/h%listW[i]==0)
- ans=min(ans,att(h,listW[i],S,height,width));
- return ans==oo?-1:ans;
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement