钻石布展

【题目描述】
奶牛贝茜总是喜欢发光的东西,开采钻石是它的一项业余爱好。它收集了n(n≤100,000)颗大小不等的钻石。它想安排它们在一对谷仓的展示柜里展览。贝茜希望每个展示柜里的钻石大小相仿,它决定大小差距超过k的两颗钻石不能在同一个展示柜(大小差距正好是k的两颗钻石可以在同一个展示柜)。现在给出k,请帮助贝茜决定两个展示柜中的钻石最大总数量。
【输入格式】
第一行包括n和k(0≤k≤1,000,000,000)。
下面n行,每行给出一个钻石的大小,所有钻石的大小不会超过1,000,000,000。
【输出格式】
一个正整数表示贝茜可以展览在两个展示柜里的钻石数量之和。
【输入样例】
7 3
10
5
1
12
9
5
14
【输出样例】
5
【样例说明】
第一个展示柜:5 5
第二个展示柜:10 12 9
共5个钻石
【分析】
单调队列+动态规划

uses math;
var
  i,j,n,k,ans:longint;
    a,fl,fr:array[0..100001]of longint;
procedure qsort(l,r:longint);
var
  i,j,temp,mid:longint;
begin
  i:=l; j:=r;
  mid:=a[(l+r) div 2];
  repeat
    while a[i]<mid do inc(i);
    while a[j]>mid do dec(j);
    if i<=j then
    begin
      temp:=a[i];a[i]:=a[j];a[j]:=temp;
      inc(i);dec(j);
    end;
  until i>j;
  if l<j then qsort(l,j);
  if i<r then qsort(i,r);
end;
begin
  readln(n,k);
    for i:=1 to n do read(a[i]);
    qsort(1,n);
    i:=1;
    for j:=1 to n do begin
      while a[j]-a[i]>k do inc(i);
        fl[j]:=max(fl[j-1],j-i+1);
    end;
    j:=n;
    for i:=n downto 1 do begin
      while a[j]-a[i]>k do dec(j);
        fr[i]:=max(fr[i+1],j-i+1);
    end;
    for i:=1 to n-1 do ans:=max(ans,fl[i]+fr[i+1]);//枚举分割点
    write(ans);
end.
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现后台可视化自助布展,你可以使用前端技术(如HTML、CSS和JavaScript)以及后端技术(如服务器端编程语言和数据库)来完成。下面是一个简单的示例代码,用于演示后台可视化自助布展的功能: HTML部分: ```html <!DOCTYPE html> <html> <head> <title>后台可视化自助布展</title> <style> /* 添加样式以布局和显示展品 */ .gallery { display: flex; flex-wrap: wrap; justify-content: space-between; } .item { width: 200px; height: 200px; background-color: #f0f0f0; margin-bottom: 20px; } </style> </head> <body> <h1>后台可视化自助布展</h1> <!-- 用于展示展品的区域 --> <div class="gallery" id="gallery"></div> <!-- 引入JavaScript代码 --> <script src="main.js"></script> </body> </html> ``` JavaScript部分 (main.js): ```javascript // 模拟从后端获取展品数据 var exhibits = [ { id: 1, name: '展品1', imageUrl: 'image1.jpg' }, { id: 2, name: '展品2', imageUrl: 'image2.jpg' }, { id: 3, name: '展品3', imageUrl: 'image3.jpg' }, // 更多展品... ]; // 获取展示区域的元素 var gallery = document.getElementById('gallery'); // 根据展品数据生成展示区域的内容 exhibits.forEach(function(exhibit) { var item = document.createElement('div'); item.className = 'item'; var image = document.createElement('img'); image.src = exhibit.imageUrl; image.alt = exhibit.name; item.appendChild(image); gallery.appendChild(item); }); ``` 在上述代码中,我们首先创建了一个HTML页面,其中包含一个用于展示展品的区域(使用Flex布局)。然后,在JavaScript代码中,我们模拟从后台获取展品数据,并根据这些数据生成展示区域的内容。对于每个展品,我们创建一个`<div>`元素,并将其添加到展示区域中。在`<div>`元素中,我们还创建了一个`<img>`元素,用于显示展品的图片。 你可以根据自己的需求修改示例代码,例如从数据库中获取展品数据,添加更多样式或交互功能等。此示例代码只是一个简单的起点,你可以根据实际情况进行扩展和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值