poj 1862 Stripies/优先队列

原题链接:http://poj.org/problem?id=1862

简单题,贪心+优先队列主要练习一下stl大根堆

写了几种实现方式写成类的形式还是要慢一些。。。

手打的heap:

1:

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cmath>
 4 #include<iostream>
 5 class Solution{
 6 public:
 7     static const int Max_N = 110;
 8     int sz;
 9     double heap[Max_N];
10     inline void init(){
11         sz = 0;
12     }
13     inline void push(double x){
14         int i = sz++;
15         while (i > 0){
16             int p = (i - 1) >> 1;
17             if (heap[p] >= x) break;
18             heap[i] = heap[p];
19             i = p;
20         }
21         heap[i] = x;
22     }
23     inline double pop(){
24         double ret = heap[0], x = heap[--sz];
25         int i = 0;
26         while ((i << 1) + 1 < sz){
27             int a = (i << 1) + 1, b = (i << 1) + 2;
28             if (b < sz && heap[a] <= heap[b]) a = b;
29             if (heap[a] <= x) break;
30             heap[i] = heap[a];
31             i = a;
32         }
33         heap[i] = x;
34         return ret;
35     }
36 };
37 int main(){
38 #ifdef LOCAL
39     freopen("in.txt", "r", stdin);
40     freopen("out.txt", "w+", stdout);
41 #endif
42     int n;
43     double a, b;
44     Solution ans;
45     ans.init();
46     scanf("%d", &n);
47     while (n--){
48         scanf("%lf", &a);
49         ans.push(a);
50     }
51     while (ans.sz > 1){
52         a = ans.pop(), b = ans.pop();
53         ans.push(2 * sqrt(a * b));
54     }
55     printf("%.3lf", ans.pop());
56     return 0;
57 }
View Code

2:

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cmath>
 4 #include<iostream>
 5 struct Node{
 6     static const int Max_N = 110;
 7     int sz;
 8     double heap[Max_N];
 9     Node() :sz(0){}
10     inline void push(double x){
11         int i = sz++;
12         while (i > 0){
13             int p = (i - 1) >> 1;
14             if (heap[p] >= x) break;
15             heap[i] = heap[p];
16             i = p;
17         }
18         heap[i] = x;
19     }
20     inline double pop(){
21         double ret = heap[0], x = heap[--sz];
22         int i = 0;
23         while ((i << 1) + 1 < sz){
24             int a = (i << 1) + 1, b = (i << 1) + 2;
25             if (b < sz && heap[a] <= heap[b]) a = b;
26             if (heap[a] <= x) break;
27             heap[i] = heap[a];
28             i = a;
29         }
30         heap[i] = x;
31         return ret;
32     }
33 }ans;
34 int main(){
35 #ifdef LOCAL
36     freopen("in.txt", "r", stdin);
37     freopen("out.txt", "w+", stdout);
38 #endif
39     int n;
40     double a, b;
41     scanf("%d", &n);
42     while (n--){
43         scanf("%lf", &a);
44         ans.push(a);
45     }
46     while (ans.sz > 1){
47         a = ans.pop(), b = ans.pop();
48         ans.push(2 * sqrt(a * b));
49     }
50     printf("%.3lf", ans.pop());
51     return 0;
52 }
View Code

3:

 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cmath>
 4 #include<iostream>
 5 const int Max_N = 110;
 6 double heap[Max_N];
 7 int sz = 0;
 8 void push(double x){
 9     int i = sz++;
10     while (i > 0){
11         int p = (i - 1) >> 1;
12         if (heap[p] >= x) break;
13         heap[i] = heap[p];
14         i = p;
15     }
16     heap[i] = x;
17 }
18 double pop(){
19     double ret = heap[0], x = heap[--sz];
20     int i = 0;
21     while ((i << 1) + 1 < sz){
22         int a = (i << 1) + 1, b = (i << 1) + 2;
23         if (b < sz && heap[a] <= heap[b]) a = b;
24         if (heap[a] <= x) break;
25         heap[i] = heap[a];
26         i = a;
27     }
28     heap[i] = x;
29     return ret;
30 }
31 int main(){
32 #ifdef LOCAL
33     freopen("in.txt", "r", stdin);
34     freopen("out.txt", "w+", stdout);
35 #endif
36     int n;
37     double a, b;
38 
39     scanf("%d", &n);
40     while (n--){
41         scanf("%lf", &a);
42         push(a);
43     }
44     while (sz > 1){
45         a = pop(), b = pop();
46         push(2 * sqrt(a * b));
47     }
48     printf("%.3lf", pop());
49     return 0;
50 }
View Code

4:

std::priority_queue<double> ans
 1 #include<cstdio>
 2 #include<cstdlib>
 3 #include<cmath>
 4 #include<queue>
 5 #include<iostream>
 6 int main(){
 7 #ifdef LOCAL
 8     freopen("in.txt", "r", stdin);
 9     freopen("out.txt", "w+", stdout);
10 #endif
11     int n;
12     double a, b;
13     scanf("%d", &n);
14     std::priority_queue<double> ans;
15     while (n--){
16         scanf("%lf", &a);
17         ans.push(a);
18     }
19     while (ans.size() > 1){
20         a = ans.top(), ans.pop();
21         b = ans.top(), ans.pop();
22         ans.push(2 * sqrt(a * b));
23     }
24     printf("%.3lf", ans.top());
25     return 0;
26 }
View Code

 

转载于:https://www.cnblogs.com/GadyPu/p/4456873.html

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

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

相关文章

java timezone id_java.util.TimeZone.setID()方法实例

全屏setID(String ID)方法被用于设置时区ID。这不会改变的时区对象中的任何其他数据。声明以下是java.util.TimeZone.setID()方法的声明。public void setID(String ID)参数ID--这是新的时区ID。返回值NA异常NA例子下面的例子显示java.util.TimeZone.setID()方法的使用package …

创建一个自己的GitHub,创建自己的开源项目

作者是一个大学在读学生&#xff0c;自己在平时的学习中&#xff0c;GitHub上的开源项目给自己提供了很大的帮助。GitHub是目前使用最广泛的分布式项目管理软件&#xff0c;GitHub上面托管了许多非常优秀的开源项目。我觉得每一个从事IT行业都应该有一个属于自己的GitHub。下面…

Ubuntu如何安装setuptools

首先百度setuptools&#xff0c;基本第一个就是官网的结果然后我们看到有两个这样的文件第一个不用想了&#xff0c;如果你要使用第一个的话&#xff0c;还要首先安装wheel。我们这里直接用鼠标选中第二个zip文件&#xff0c;然后右键&#xff0c;复制链接。然后在我们的Ubuntu…

JMeter学习(四)参数化、断言、集合点

1.参数化 录制脚本中有登录操作&#xff0c;需要输入用户名和密码&#xff0c;假如系统不允许相同的用户名和密码同时登录&#xff0c;或者想更好的模拟多个用户来登录系统。 这个时候就需要对用户名和密码进行参数化&#xff0c;使每个虚拟用户都使用不同的用户名和密码进行访…

php class使用方法,php的类使用方法问题

php的类使用方法&#xff1a;1、类通过class关键字来定义&#xff1b;2、访问对象的时候&#xff0c;属性名前不要加【$】&#xff1b;3、通过【->】访问修改类内成员变量&#xff1b;4、函数的返回值通过return来返回。php的类使用方法&#xff1a;1.语法说明和其他语言一样…

详解汇编语言中乘法指令:MUL、IMUL

本文参考了马维华老师的《微机原理与接口技术》一书 指令格式&#xff1a; MUL REG/MEM &#xff1b;REG寄存器&#xff0c;MEM存储器 IMUL REG/MEM MUL和IMUL指令分别用于实现无符号数的乘法和有符号数的乘法运算。都只有一个源操作数&#xff0c;可以使寄存器或存储…

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(44)-工作流设计-设计表单...

构建ASP.NET MVC4EF5EasyUIUnity2.x注入的后台管理系统&#xff08;44&#xff09;-工作流设计-设计表单 原文:构建ASP.NET MVC4EF5EasyUIUnity2.x注入的后台管理系统&#xff08;44&#xff09;-工作流设计-设计表单系列目录 设计表单是比较复杂的一步&#xff0c;完成一个表单…

php如何转类型,PHP数据类型转换

指的是将数据(变量)的值转换成目标数据类型。PHP中有两种数据类型转换方式&#xff1a;自动转换&#xff0c;强制转换自动转换&#xff1a;系统根据操作所需要的类型将变量的值进行对应类型的转换自动转换都是系统本身所做的事情&#xff0c;不需要用户去干预。强制转换&#x…

dz打不开plugin. php,Discuz!应用中心打不开空白的解决方法

近期&#xff0c;很多使用Discuz!程序建论坛的站长都会发现&#xff0c;Discuz!后台的应用中心打不开了。这二天Discuz!终于给出了原因&#xff1a;十分抱歉的通知您&#xff0c;由于资源和人力投入问题&#xff0c;我们已经关闭了 www.discuz.net 的发言权限&#xff0c;但是历…

ECshop安装及报错解决方案总结

一、安装ECshop ECShop是一款B2C独立网店系统 &#xff0c;适合企业及个人快速构建个性化网上商店。系统是基于PHP语言及MYSQL数据库构架开发的跨平台开源程序。2006年3月推出以来1.0版以来&#xff0c;受到市场的检验&#xff0c;广受好评。 1.安装准备 ECshop最新版本为2.7.3…

Codeforces Round #241 (Div. 2) A. Guess a number!

题目链接 题意 &#xff1a; 就是猜数游戏&#xff0c;根据给定的操作&#xff0c;让你输出一个符合条件的。 思路 &#xff1a; 这个题好玩儿&#xff0c;设置两个变量&#xff0c;一个找符合条件的数的上限&#xff0c;一个找下限&#xff0c;再判断一下。 1 #include <st…

SET-UID程序漏洞实验

20125102 一、实验描述 Set-UID 是Unix系统中的一个重要的安全机制。当一个Set-UID程序运行的时候&#xff0c;它被假设为具有拥有者的权限。例如&#xff0c;如果程序的拥有者是root&#xff0c;那么任何人运行这个程序时都会获得程序拥有者的权限。Set-UID允许我们做许多很有…

java实验二

课程&#xff1a;Java程序设计 班级&#xff1a; 1352 姓名&#xff1a;黄卫   学号&#xff1a;20135221 成绩&#xff1a; 指导教师&#xff1a;娄嘉鹏 实验日期&#xff1a;2015.05.05 实验密级&#xff1a; 预…

【Linux】正确的关机方法

1&#xff09;shutdown命令 我们较常使用的是shutdown这个命令&#xff0c;这个命令可以安全地关闭或重启Linux系统&#xff0c;它在系统关闭之前给系统上的所有登录用户提示一条警告信息。该命令还允许用户指定一个时间参数&#xff0c;可以是一个精确的时间&#xff0c;也可以…

putty连虚拟机中Linux出现Access Denied

环境&#xff1a;VMwarekali Linux出现这个问题&#xff0c;肯定是你想尝试直接通过使用root账户连接你的linux&#xff0c;这样肯定是不行的&#xff0c;why&#xff1f;为了保证服务器安全&#xff0c;几乎所有的服务器都禁止了超级用户直接登录系统&#xff0c;而是通过普通…

Floyd算法应用-医院选址问题

1)问题描述 n个村庄之间的交通图可以用有向网图来表示&#xff0c;图中边<vi, vj>上的权值表示从村庄i到村庄j的道路长度。现在要从这n个村庄中选择一个村庄新建一所医院&#xff0c;问这所医院应建在哪个村庄&#xff0c;才能使所有的村庄离医院都比较近&#xff1f; 2)…

linux ls 命令排序,如何在Linux中使用ls命令按大小对所有文件进行排序

ls命令是列出目录内容的最流行且非常有用的命令。 在本文中&#xff0c;我们将解释如何使用ls sort选项按大小列出目录内容。1)按大小列出目录中的文件(排序)要列出具有大小排序的特定目录的内容&#xff0c;我们将使用-lS选项和ls命令。 它将在顶部显示最大的文件。[linuxidcl…

基于tcp connect的端口扫描程序

原理&#xff1a;connect()函数用于对于每一个感兴趣的目标计算机的端口进行连接&#xff0c;如果该端口处于侦听状态&#xff0c;那么connect()就会成功&#xff0c;即没有提供服务。如果对于每一个目标端口以串行的方式使用单独的connect()调用&#xff0c;需要较长的时间&am…

linux如何运行多个硬盘,一个硬盘如何装两个Linux

1个硬盘已安装Fedora 8 Linux系统&#xff0c;并安装grub引导管理程序&#xff0c;现要在这个硬盘的空闲分区中安装Fedora 9&#xff0c;操作如下&#xff1a;1.将Fedora-9-i386-DVD.iso文件放到一个Windows Fat32分区((hd0,4))的根目录&#xff0c;将这个iso文件中的isolinux目…

玩转Win32开发(2):完整的开发流程

上一篇中我给各位说了一般人认为C中较为难的东西——指针。其实对于C&#xff0c;难点当然不局限在指针这玩意儿上&#xff0c;还有一些有趣的概念&#xff0c;如模板类、虚基类、纯虚函数等&#xff0c;这些都是概念性的东西&#xff0c;几乎每一本C书上都会介绍&#xff0c;而…