合并果子(Vijos P1097)

  刚刚做出这道题,感觉很兴奋啊,对于我这种弱菜来说能完美的AC这道题真是令人振奋不已啊!

  (情不自禁的将AC记录发上来了,勿怪勿怪!)

  这道题是我们向总点名要做的,这几天学了很多新内容,于是乎拖到了今天才做。

  由于刚刚学了堆排序,仔细一看这道题的描述,感觉用堆排序来做真是再合适不过了(网上貌似有很多做法,快排什么,有机会换个算法编一下),因为只需要将合并产生的数据放入堆中筛一遍即可。

  刚开始认为只不过是简单的将堆排序中将第一个置换为最后一个,并将dec(记录指针,2)就可以了。就这样随便整了一下就交上去了,发现只有10分(说到这个10分,某位大神还以为是哪个小地方出了问题,结果我一看测试数据,发现对的那个点就是题目给出的例子,蛋疼有木有???)。

  冥思苦想了好一会,终于想明白了不要一次性将第一第二两个值全换掉,这样堆筛下来无法得到正确的序列。先将最后一个置换为第一个,筛一遍,由于筛过后排在第一个的数据一定是刚刚第二小的数据,只需要用刚刚记录下来的x[1]+x[2]将其置换即可。

  务必记在在dec(指针)之前将当前指向的数据赋值为maxlongint,否则会造成严重后果,就是被这个卡了好久(因为数组很大,之后的数据全部为0,会造成将0置换上来的情况,置为maxlongint便不会出现这个问题)。

  废话不多说,直接上源代码:

 

 1 program duipaixu2;
 2 type
 3         arr=array[1..10001] of longint;
 4 var
 5         x:arr;
 6         i,j,j1,n:longint;
 7         bool:boolean;
 8         s,s1:int64;
 9 procedure heap(var x:arr;j,i:longint);【堆排序】
10 var
11         i2,t1:longint;
12 begin
13         t1:=x[i];
14         i2:=2*i;
15         while  i2<=j do
16         begin
17                 if (i2<=j) and (x[i2] > x[i2+1]) then i2:=i2+1;
18                 if t1 > x[i2] then
19                 begin
20                         x[i]:=x[i2];
21                         i:=i2;i2:=2*i;
22                 end
23                 else i2:=j+1;
24         end;
25         x[i]:=t1;
26 end;
27 {================== main =====================}
28 begin
29         assign(input,'hebin.in');
30         assign(output,'hebin.out');
31         reset(input);
32         rewrite(output);
33         read(n);
34         for i:=1 to n do
35                 read(x[i]);
36         x[n+1]:=maxlongint;
37         j:=n;
38         s:=0;
39         s1:=0;
40         for i:=n div 2 downto 1 do  【建立新堆】
41                         heap(x,n,i);
42         repeat
43                 bool:=true;
44                 if x[2]<=x[3] then
45                 begin
46                         s1:=x[1]+x[2];
47                         s:=s+s1;
48                 end
49                 else begin s1:=x[1]+x[3];s:=s+s1 end;
50                 j1:=j;
51                 dec(j);
52                 if j>1 then
53                 begin
54                         x[1]:=x[j1];
55                         x[j1]:=maxlongint; 【这一步很重要,否则会出现上文提到的结果】
56                         heap(x,j,1);    【分两次筛】
57                         x[1]:=s1;
58                         heap(x,j,1);
59                 end;
60         until j=1;
61         write(s);
62         close(input);
63         close(output);
64 end.

By ZYT

12.10.05

转载于:https://www.cnblogs.com/cszyt/archive/2012/10/05/2712452.html

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

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

相关文章

vim 删除行_【收藏】138条 Vim 命令、操作、快捷键全

关注我&#xff0c;你的眼睛会怀孕命令历史以:和/开头的命令都有历史纪录&#xff0c;可以首先键入:或/然后按上下箭头来选择某个历史命令。启动vim在命令行窗口中输入以下命令即可vim 直接启动vimvim filename 打开vim并创建名为filename的文件文件命令打开单个文件vim file同…

vlookup练习_那个vlookup,我总是学不会啊

在Excel函数中&#xff0c;有那么的一个万金油Excel函数&#xff0c;它既可以正向查找&#xff0c;逆向查找&#xff0c;还可以多条件查找&#xff0c;它就是Vlookup。Vlookup与IF、sumifs/countifs誉为四大必学Excel函数。以下内容节选自【快速入门Excel基础教程】中的第4-2章…

uniapph5授权成功后返回上一页_记一次授权系统的安全测试

山东泽鹿安全威胁管理 漏洞运营 应急响应原创声明&#xff1a;泽鹿安全原创文章&#xff0c;欢迎转载&#xff0c;请注明出处&#xff01;ID : 秋水拿到授权系统IP&#xff0c;首先测一下目录找后台&#xff0c;Nmap扫一下端口&#xff0c;看看后台是不是在其他端口就可以了…

罗斯蒙特电磁流量计8723说明书_罗斯蒙特8732E电磁流量计故障原因及解决办法!...

今天我们来说说罗斯蒙特8732E电磁流量计的一些基本故障和解决办法&#xff0c;我们在排除电磁流量计的故障时&#xff0c;确定问题至关重要。下面提供了无法正常工作的电磁流量计表现出的常见症状。此表提供了潜在的原因以及为每种症状建议的纠正措施。流量计故障&#xff1a;0…

mysql表数据提取工具,Jailer数据提取

软件简介Jailer工具一款功能强大的数据提取工具&#xff0c;此次小编给大家推荐的这款新版的软件中增加了在数据浏览器界面编辑和执行任意 SQL 语句的功能&#xff0c;通过也可以基于行对 SQL 语句执行结果的数据进行编辑&#xff0c;提升了语法高亮&#xff0c;推荐各位有需要…

分布式事务框架_阿里分布式事务框架GTS开源啦!

点击上方“Java后端技术”&#xff0c;选择“置顶或者星标”每天带你看高清大图哦&#xff01;整理&#xff1a;开源中国就在9号这天&#xff0c;阿里分布式事务框架GTS开源了一个免费社区版Fescar&#xff0c;看到了这个消息内心非常的激动&#xff01;在微服务系统中&#xf…

SqlServer开发利器—SQL Prompt5

智能提示 SQL Prompt5的智能提示比SqlServer自带的要好很多&#xff0c;而且可以设置让关键字自动大写&#xff0c;对于数据库中的对象可以很方便的看到对象的创建脚本&#xff0c;如下图&#xff1a; 格式化代码 有时候我们把从程序中跟踪到的代码或是从SQL跟踪器中跟踪到的代…

unity text不能刷新_Unity使用ComputerShader实时压缩RT!

背景computer shader最近突然变得异常火热&#xff0c;原神和UE开发者大会多次被人提到通过computershader对手机平台的优化。一方面得益于最近手机硬件的提升&#xff0c;对computer shader的支持和性能提升。另一方面&#xff0c;新出的游戏对于画面质量的要求越来越高&#…

zip转直链php,蓝奏网盘直链转换器

蓝奏网盘直链转换器是一款非常不错的网盘直链转换工具&#xff0c;能够帮助用户批量进行蓝奏云网盘链接转换&#xff0c;可以自定义设置转换线程数&#xff0c;让用户能够直接下载分享的文件&#xff0c;下载速度非常快&#xff0c;有需要的用户不要错过了&#xff0c;赶快来下…

hdu 1695

题目&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1695 给出a b c d k 在 [a,b] [c,d]内各找一个数&#xff0c;使得gcd(x,y) k&#xff0c;也就是说 gcd(x / k, y / k) 1&#xff0c;所以就是在 [1,b / k] [1, d / k]中找互质的对数。容斥原理和欧拉函数的应用&a…