Libre OJ 10005 数列分段 II数列极差(二分结果,倒推过程)

题目链接:https://loj.ac/problem/10014
在这里插入图片描述
分析:对于结果,两种极限情况
第一种,N个数,分了N组,此时的结果为N个数的最大值
第二种,N个数分了1组,最大值为N个数的和。

从这两种极值出发,进行二分。对应每一个值的分组情况,从而确定区间
代码

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int INF=0x3f3f3f3f;
int mi;
int N,M,a[100004];
int solve(int x)
{
    int sum=0,ans=1;
    for(int i=0; i<N; i++)
    {
        sum+=a[i];
        if(sum>x)
        {
            ans++;/*ans为分组的数量*/
            sum=a[i];
        }
    }
    if(ans>M)/*说明分小了*/
        return 0;
    else
        return 1;
}
int main()
{
    scanf("%d%d",&N,&M);
    int l=0,r=0;
    for(int i=0; i<N; i++)
    {
        scanf("%d",&a[i]);
        l=max(l,a[i]);/*两种极值情况*/
        r+=a[i];
    }
    while(l<r)
    {
        int mid=(l+r)>>1;/*对于每一种结果看能分几组*/
        if(solve(mid))
            r=mid;
        else
            l=mid+1;
    }
    printf("%d\n",r);
    return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: LibreCAD 是一款开源的计算机辅助设计(CAD)软件,它提供了创建和编辑二维几何图形的功能。作为一款自由的软件,LibreCAD 可以进行二次开发,以适应用户的特定需求。 二次开发是指在现有软件的基础上进行修改和扩展,以添加新功能或改进现有功能。对于LibreCAD来说,二次开发可以通过以下几种方式进行: 1. 插件开发:LibreCAD提供了插件接口,可以将自定义的功能以插件的形式集成到软件中。通过开发插件,用户可以根据自己的需求增加新的绘图工具、修改现有工具的行为,或是实现其他特定的功能。 2. 编写脚本:LibreCAD支持使用脚本进行自动化操作和批处理。用户可以编写脚本来执行一系列的绘图操作,从而提高效率。脚本可以使用Python编程语言编写,利用LibreCAD提供的API来访问软件的功能。 3. 修改源代码:作为开源软件,LibreCAD的源代码是开放的,用户可以直接对源代码进行修改。这样可以实现更灵活、更深度的二次开发。用户可以根据自己的需求修改现有功能或添加新功能,然后重新编译软件以应用修改。 通过这些二次开发的方式,用户可以根据自己的需求对LibreCAD进行定制化,使其更好地满足特定领域或行业的需求。同时,用户也可以通过将二次开发的成果贡献回LibreCAD社区,与其他开发者分享和合作,共同推动软件的进化和改进。 ### 回答2: LibreCAD是一款开源的2D计算机辅助设计(CAD)软件,支持多种操作系统,并且具有丰富的功能和用户友好的界面。LibreCAD的二次开发是指在LibreCAD的基础上进行个性化定制和功能扩展。 进行LibreCAD二次开发的主要目的是适应特定的需求和提高软件的功能。通过二次开发,可以根据用户的具体需求添加新的功能模块、定制图形界面、增加特定的工具和命令等等。二次开发可以使LibreCAD更加符合用户的实际工作需求,提高工作效率和准确性。 LibreCAD的二次开发主要可以通过以下几个步骤来实现: 1. 设置开发环境:首先,需要准备开发环境,包括安装所需的开发工具和框架,如编程语言、集成开发环境、LibreCAD的源代码等。 2. 分析需求:根据用户的需求和LibreCAD的基本功能,进行需求分析。确定需要添加哪些新的功能和模块,或对现有功能进行修改和扩展。 3. 进行编码和测试:根据需求分析的结果,进行编码开发。可以使用LibreCAD提供的API(应用程序接口)和文档来进行开发工作,并通过测试验证新的功能和模块的正确性和可靠性。 4. 集成和部署:将二次开发的模块和功能集成到LibreCAD中,并进行部署,使用户能够使用新的定制化版本的LibreCAD。 总而言之,LibreCAD的二次开发为用户提供了个性化定制的机会,使软件更加符合用户的实际需求。通过认真分析需求、合理设计和开发,可以实现更高效、准确和方便的使用体验。 ### 回答3: LibreCAD是一个开源的2D计算机辅助设计(CAD)软件,它提供了一系列功能和工具,可用于创建和编辑技术绘图、平面布局和设计等。LibreCAD支持多种文件格式,包括DXF、DWG和SVG等,并且具有友好的用户界面和易于学习的工作流程。 对于想要二次开发LibreCAD的人来说,它提供了一些途径和选项。首先,LibreCAD是基于Qt框架开发的,因此熟悉Qt编程的开发者可以通过Qt的工具和库来扩展和自定义LibreCAD的功能。这意味着开发者可以通过添加新的绘图工具、改进用户界面、导入导出新的文件格式等方式,为LibreCAD增加新的特性。 其次,LibreCAD还提供了用于插件开发的API接口。通过这个API,开发者可以编写自己的插件,以实现特定的需求。插件可以包括自定义绘图工具、脚本和扩展等。开发者可以在LibreCAD的文档中找到有关API的详细信息和示例代码。 另外,LibreCAD的开发社区也提供了丰富的资源和支持。开发者可以在社区论坛上与其他开发者交流经验和解决问题,还可以参考社区的文档和教程,学习如何进行二次开发。 总而言之,LibreCAD提供了丰富的二次开发选项和资源,使开发者能够根据自己的需求扩展和定制这个2D CAD软件。无论是通过Qt编程、插件开发还是参与开发社区,开发者都可以发挥创造力,让LibreCAD更好地满足他们的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zaiyang遇见

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值