1 条题解
-
1
观察样例图片可以看得出来组成一个矩形需要四个A,顺时针方向来看,B和C是交替分布的,所以不难想B和C的数量相等,然后根据bcd的关系,遍历所有可能情况的长,二分查找这种情况下最大的宽。
#include<bits/stdc++.h> using namespace std; #define int long long void sjl() { int a, b , c, d; cin >> a >> b >> c >> d; int ans = 0; if(a < 4)//无法组成矩形 { ans = 0; } else { for(int i = min(b, c); i >= 0; i --)//边长最长应该是b/2+c/2但bc数量相等 {//遍历长,二分查找满足情况的最长的宽 int l = 0, r = min(b, c); while(l <= r) { int mid = (l + r) / 2; if(i * mid <= d)//此时长乘宽就是中间需要被d填充的面积 { if(b >= i + mid && c >= i + mid)//确保bc数量满足情况 { ans = max(ans ,(2 + i) * (2 + mid));//满足情况就维护一次答案 } l = mid + 1; } else { r = mid - 1; } } } } cout << ans <<"\n"; } signed main() { ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); int T_ = 1; cin >> T_; while(T_ --) { sjl(); } return 0; }
信息
- ID
- 1059
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- 递交数
- 34
- 已通过
- 3
- 上传者