Codeforces Round #297 (Div. 2)C. Ilya and Sticks

本文介绍了一种求解最大矩形面积的算法实现,通过排序和遍历木头长度数组,确保组成的矩形面积最大化。文章提供了完整的C++代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:给你n 个木头的长度   ,  问你组成矩形的最大总面积为多少,  且木头长度L   可以当作L-1 来使用。

题解:很显然   组成矩形要保证总面积最大   只有大的和大的边组成才能保证面积最大,并且如果当前大的为偶数条那么不需要变成-1  否则变成减1   从头到尾扫一遍  没了

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std; 
__int64 value[1000005]; 
int main()
{
    int n;
    while(scanf("%d", &n) != EOF)
    {
        for(int i = 0; i < n; i++)
        scanf("%I64d", &value[i]);    
        sort(value, value + n);
        __int64 w = 0, sum = 0; 
        int i = n-1; 
        while(i >= 0)
        {
            //printf("%d\n", i); 
            if(value[i] == value[i-1]+1 || value[i] == value[i-1])
            { 
               if(w == 0)
               {
                  w = value[i-1];     
               }            
               else 
               {
               //   printf("%I64d %I64d\n", w, value[i-1]); 
                  sum += (w * value[i-1]);   
                  w = 0;  
               } 
               i -= 2; 
              // printf("%I64d\n", w); 
            }        
            else i -= 1; 
        }            
        printf("%I64d\n", sum); 
    }    
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值