Sort HDU5884(二分+多叉哈夫曼树)

HDU5884 Sort

题意:有n个序列要进行归并,每次归并的代价是两个序列的长度的和,要求最终的代价不能超过规定的T,求在此前提下一次能同时进行归并的序列的个数k。

思路:还是太单纯,看完题目一直以为要用归并排序来解题,如果已经看过多叉哈夫曼树的知识的话估计就不会这样了。先二分查找这个k,然后用多叉哈夫曼树来判断这个k是不是还能再变小。用两个队列来实现多叉哈夫曼树。

PS:如果不进行提前处理的话,最后一次的归并可能就凑不齐k个来了,所以需要提前处理一下。

代码:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <set>
#include <queue>
using namespace std;
const int maxn = 1e5 + 100;
typedef long long ll;
//typedef pair<int,int> P;
queue<ll> q1;
queue<ll> q2;
int T,n;
ll a[maxn];
ll t;bool Hufman(int x)
{while (!q1.empty()) q1.pop();while (!q2.empty()) q2.pop();int tt = (n - 1) % (x - 1);if (tt){for (int i = 1; i <= x - 1 - tt; i++)//添加虚构0,使得最后一次能凑齐k个序列,手动模拟了一下求tt的过程,q1.push(0);//但不明白n-1具体的原因,不知是不是固定的模式
    }for (int i = 1; i <= n; i++)q1.push(a[i]);ll sum = 0;while (1){ll tem = 0;for (int i = 1; i <= x; i++){if (q1.empty() && q2.empty())break;if (q1.empty()){tem += q2.front();q2.pop();}else if (q2.empty()){tem += q1.front();q1.pop();}else{int tx, ty;tx = q1.front();ty = q2.front();if (tx < ty){tem += tx;q1.pop();}else{tem += ty;q2.pop();}}}sum += tem;if (q1.empty() && q2.empty())break;q2.push(tem);//q2这个序列一定是有序的
    }if (sum <= t)return 1;elsereturn 0;
}int main()
{scanf("%d", &T);while (T--){scanf("%d%lld", &n, &t);for (int i = 1; i <= n; i++)scanf("%lld", &a[i]);sort(a + 1, a + 1 + n);int st = 2, en = n;while (st < en){int mid = (st + en) / 2;if (Hufman(mid))en = mid;elsest = mid + 1;//printf("GG\n");
        }printf("%d\n", st);}return 0;
}
View Code

 

转载于:https://www.cnblogs.com/sykline/p/9737772.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python来源是什么_python起源?为什么使用python?直至爱上python的五个理由

原标题&#xff1a;python起源&#xff1f;为什么使用python&#xff1f;直至爱上python的五个理由Python的创始人&#xff0c;吉多范罗苏姆&#xff0c;是一名荷兰计算机程序员&#xff0c;他作为 Python 程序设计语言的作者而为人们熟知。在 Python 社区&#xff0c;吉多范罗…

Linux系统(五)负载均衡LVS集群之DR模式

序言 DR模式是lvs集群中三种负载均衡模式的其中一种&#xff0c;那么上一篇中我写啦关于NAT模式的搭建与原理&#xff0c;为什么还要有DR模式与IP隧道模式呢&#xff1f; 首先我们来看3张图。LVS/NAT模式如下图&#xff1a; LVS/IP隧道模式&#xff0c;如下图&#xff1a; LVS/…

Redux API之applyMiddleware

applyMiddleware(...middlewares) 使用包含自定义功能的 middleware 来扩展 Redux 是一种推荐的方式。Middleware 可以让你包装 store 的dispatch 方法来达到你想要的目的。同时&#xff0c; middleware 还拥有“可组合”这一关键特性。多个 middleware 可以被组合到一起使用&a…

计算机2018创业方向,推荐2018年创业的方向

原标题&#xff1a;推荐2018年创业的方向1 新电商传统的零售业收到互联网电商的重冲击&#xff0c;从而进行线上线下的结合是必然的趋势&#xff0c;新零售&#xff0c;新电商&#xff0c;是几千万零售企业成功转型的必然之路&#xff0c;学习一套全面的新电商转型的方法&#…

包无法安装_详细教程 | 安装Python编程环境以及使用OpenpyXl操作Excel

详细教程 | 安装Python编程环境以及使用OpenpyXl操作Excel注意&#xff1a;下列教程为 Windows7 64位&#xff1b;Windows 10有部分步骤有差异&#xff0c;请参考使用&#xff01;01 下载Python程序安装包首先前往Python官网 www.python.org,进入官网点击 Downloads,然后点击 W…

Activity、Fragment、Dialog基类简单整理

版权声明&#xff1a;本文为HaiyuKing原创文章&#xff0c;转载请注明出处&#xff01; 概述 这里简单记录下Activity、Fragment、Dialog基类中的常规写法&#xff0c;后续根据项目需求进行相应的扩展。 BaseActivity.java package com.why.project.myapptemplet.activity;impo…

request重定向_golang不想http自动处理重定向的解决方案

前言有时候发送http请求不想让库自动帮忙处理重定向&#xff0c;库里面默认的是会把所有重定向都完成一遍&#xff0c;结果就是最后一个没有重定向的请求的结果。因此需要一种方案直接获取首次访问的结果&#xff0c;不走重定向。go的http库里面是使用如下代码检查重定向的&…

C语言项目开发-项目架构和编程命名规范

一个项目的流程&#xff1a;1、公司市场人员与客户交流&#xff0c;了解客户、引导客户使用公司最优资源并产出一份市场需求文档 2、公司需求人员&#xff08;BA&#xff09;与客户交流&#xff0c;了解客户需求并产出一个软件需求文档 3、项目经理、开发小组成员、需求人员&am…

ajax登录验证的原理,ajax用户登录验证-get和post提交方式,与工作原理—2018-8-15...

ajax用户登录验证&#xff1a;实例html>Ajax实战:表单验证用户登录邮箱: 密码: 提交let btn document.getElementsByTagName(button)[0];btn.onclick function () {//1.创建xhr对象let xhr new XMLHttpRequest();//2.监听响应状态xhr.onreadystatechange function(){// …

将Python脚本打包成可执行文件

Python是一个脚本语言&#xff0c;被解释器解释执行。它的发布方式&#xff1a; .py文件&#xff1a;对于开源项目或者源码没那么重要的&#xff0c;直接提供源码&#xff0c;需要使用者自行安装Python并且安装依赖的各种库。&#xff08;Python官方的各种安装包就是这样做的&a…

float foo=42e1为什么错_为什么重写了equals()也要重写hashCode()

小Hub领读&#xff1a;虽然是很基础的一篇文章&#xff0c;但是对于equals、hashcode两个方法&#xff0c;相信很多人都与其中的规则不熟悉&#xff0c;来跟着小Hub花个8分钟回顾一下&#xff01;作者&#xff1a;不学无数的程序员https://my.oschina.net/u/4030990/blog/31341…

ssh客户端_一款基于TAS框架的SSH客户端蠕虫

TEA是一款基于TAS框架的SSH客户端蠕虫&#xff0c;从本质上说&#xff0c;它是一个仿冒的SSH客户端&#xff0c;它能够修改tty输入/输出来实现任意命令执行&#xff0c;或通过SSH连接来上传自身以实现渗透感染。为了实现该工具的正常功能&#xff0c;远程主机需要满足以下条件&…

Selenium入门11 滚动条控制(通过js)

这一节要有js基础。做web端的UI自动化必须要有html&#xff0c;css&#xff0c;javascript前端基础。 滚动条控制&#xff1a; 1 移动垂直滚动条 document.documentElement.scrollTop 2 移动垂直滚动条 document.documentElement.scrollLeft 3 找到某个元素&#xff0c;移动到可…

Qt之QNetworkInterface

简述 QNetworkInterface类负责提供主机的IP地址和网络接口的列表。 QNetworkInterface表示了当前程序正在运行时与主机绑定的一个网络接口。每个网络接口可能包含0个或多个IP地址&#xff0c;每个IP地址都可选择性地与一个子网掩码和/或一个广播地址相关联。这样的列表可以通过…

第二周计划

上周计划回顾 3.5 ~ 3.11 数据&#xff1a; 评师网爬取&#xff0c;完成&#xff1a;2k条记录 finished后端 数据结构 技术选型 学校API封装未完成&#xff1a;后端负责人出差 工作暂停产品 功能设计&#xff1a;主要功能提交&#xff1a;原型图 几个页面 每个页面大概功能完成…

python编程软件排行榜_PYPL 9月编程语言排行榜发布 Python一枝独秀

开发者可以将 PYPL 作为一个参考&#xff0c;决定学习何种语言或 IDE&#xff0c;或者在新的软件项目中使用何种语言或数据库。9 月份的榜单如下&#xff1a;前五名分别是 Python、Java、JavaScript、C# 与 PHP。相比去年 9 月份的数据&#xff0c;除了 Python 大幅上涨了 4.5%…

分享到系统面板_win7电脑没有nvidia控制面板怎么办【解决方法】

我们在使用电脑的时候&#xff0c;当电脑显卡出现问题导致屏幕画面不清晰时&#xff0c;可以使用win7系统自带nvidia控制面板&#xff0c;它能够对显卡进行设置&#xff0c;提升显卡功能&#xff0c;不过很多电脑用户点击nvidia控制面板时却提示nvidia显示设置不可用&#xff0…

Python之数据加密与解密(hashlib、hmac、random、base64、pycrypto)--转载

本文内容 数据加密概述Python中实现数据加密的模块简介hashlib与hmac模块介绍random与secrets模块介绍base64模块介绍pycrypto模块介绍总结参考文档提示&#xff1a; Python 2.7中的str是字节串&#xff0c;而Python 3.x中的str是字符串。本文中的代码都是通过Python 2.7实现的…

day3-文件操作之基本操作

一、文件的基本操作 文件内容&#xff1a; Somehow, it seems the love I knew was always the most destructive kind 不知为何&#xff0c;我经历的爱情总是最具毁灭性的的那种 Yesterday when I was young 昨日当我年少轻狂1、read() 当read()函数中传入整数(int)参数&#…

QT连接多种数据库f方法及测试

QT提供了对多种数据库的访问支持&#xff0c;对SQL Server也可以通过ODBC来进行访问。要想顺利访问SQL Server。 首先要保证以下几点&#xff1a;1. QT编译时已经编译了QtSql2. 编译了ODBC插件。可以通过 configure -plugin-sql-odbc来保证&#xff0c;也可以单独编译~/src/plu…