您的位置:首页 > 其它

CodeForces-525C Ilya and Sticks

2015-08-04 10:41 288 查看
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>

using namespace std;

const int maxn = 1e6;
long long l[maxn], lx[maxn];
int n, k;
long long s;
int main()
{
while(~scanf("%d", &n))
{
k = 0;
s = 0;
memset(l, 0, sizeof(l));
memset(lx, 0, sizeof(lx));
for(int i = 0; i < n; i ++)
scanf("%I64d", &l[i]);
if(n < 4)
{
cout << "0" << endl;
continue;
}
sort(l, l + n);

int i = n - 1;
while(i - 1 >= 0)
{
if(l[i] == l[i - 1])
{
lx[k] = l[i];
i -= 2;
k++;
}
else if(l[i] - 1 == l[i - 1])
{
lx[k] = l[i] - 1;
i -= 2;
k++;
}
else
i--;
}
for(int j = 0; j < k; j += 2)
s += lx[j] * lx[j + 1];
printf("%I64d\n",s);
}
return 0;
}
题意:输入一个n。之后输入n个数。表示n条长方形的边。之后每四条自由组合成长方形。问怎么样组合长方形总面积最大。(每条边都可以缩短1)
题解:总面积要求最大。自然是大数×大数。当然必须有两条相同的边才能组成长方形。一个数组l[maxn]用来初始存数。另一个数组lx[maxn]用来存放满足大小相同的边(2边存放一次就够)(如果-1 都不能有相同的边长 那条边舍去 不做任何处理)。还有就是n必须大于等于4(之前临时补了这段代码 结果放错位置 wa了一次。)还有就是 一开始两个数组都开了int型。但是最后相乘的时候一定会超过范围。所以最后都开了long long。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: