3969: [WF2013]Low Power

本文介绍了一种通过排序和二分查找解决电池能量分配问题的方法,旨在将2nk个电池合理分配给n个机器的2个芯片,使得机器间能量差最小,通过实现具体的C++程序代码,展示了算法的具体步骤。

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

题目:

有n个机器,每个机器有2个芯片,每个芯片可以放k个电池。
每个芯片能量是k个电池的能量的最小值。
两个芯片的能量之差越小,这个机器就工作的越好。
现在有2nk个电池,已知它们的能量,我们要把它们放在n个机器上的芯片上,
使得所有机器的能量之差的最大值最小。

这道题让我因为题意卡了很久很久。。。。

首先排序电池,然后二分答案x,

判断过程:其实对一台机器有影响的只有两个芯片上的最小值,所以我们只要枚举(相邻的肯定最优)相邻的两个电池,只要它们的差小于枚举的x,就可以给一个机器来奠定基础啦!(其实就指他们两个能成为这台机器中两块芯片上的最小值,且符合x),那么我们需要找到符合x的n对芯片,这样才能成为n台机器(能找就找,)。好了,有了架子以后,因为每台机器需要2k个芯片,那么我们就需要判断,是否每个架子都能够有值比最小电池要大的2k-2个电池来填充。(具体判断会注释在程序里)。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int num,n,k,lef,righ,mid,ans,a[2000000];
bool b[2000000];
bool check(int x)
{
    int p=0,i=1,tot=0,t=0;
    t=0;
    tot=0;
    a[num+1]=-1;
  for (i=1;i<=num;i++) b[i]=true;
  for (i=1;i<=num-1;i++)//判断是否有符合x的n台机器。 
  if ((b[i])&&(a[i+1]-a[i]<=x)&&(t<n))
  {
      b[i]=false;
      b[i+1]=false;
      t+=1;
  }
  if (t<n) return false;//如果没有n台就退出
  p=0;
  for (int i=num;i>=1;i--)//从大到小枚举没被做架子的电池
  if  (b[i]) tot+=1;//记录当前有几块没被做架子的电池
  else 
  {
      p+=1;//记录有几块被做成架子的电池
      if (tot<p*(k-1)) return false;//如果后面较大(即大于最小值的电池,填进去才不会使最小值改变)的多余的电池数量不够填满机器,那么这台机器,就没法放满电池,
情况不符合x。
} return true; } int main() { cin>>n>>k; num=2*k*n; for (int i=1;i<=num;i++) cin>>a[i]; sort(a+1,a+1+num); lef=0; righ=a[num]-a[1]; while (lef<=righ) { mid=(lef+righ)/2; if (check(mid)) { ans=mid; righ=mid-1; } else lef=mid+1; } cout<<ans<<endl; return 0; }

ps:因为程序有些繁琐,所以容易超时。

转载于:https://www.cnblogs.com/2014nhc/p/6201580.html

一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值