SP11573 题解-mnesia
这道题需要一定的思维量,但是最后代码的实现是比较简单的。
题目给出四个正方形的边长,要求找到最小的大正方形,使得其能不重叠地容纳下这四个正方形(平铺)。
我的推导过程如下:假设这四个正方形的边长从小到大依次为
接下来简单证明一下本题结论:输出
首先假设
可以借助下面这张图片来理解一下
下面给出代码:
#include<iostream>
#include<algorithm>
using namespace std;
int a[5];
int cnt = 1;
int main()
{
while(cin >> a[1] >> a[2] >> a[3] >> a[4])
{
sort(a + 1, a + 5, greater<int>());
cout << "Case " << cnt << ": " << a[1] + a[2] << endl;
cnt++;
}
return 0;
}
注意使用 greater<int> 时后面一定要加一个括号,否则会引发编译错误。当然,也可以直接默认从小到大排序,输出 a[3] + a[4]。