HDOJ 1896 Stones 解题报告

题目分类:优先队列+STL

作者:ACShiryu

做题时间:2011-7-18

Stones

Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)
Total Submission(s): 217    Accepted Submission(s): 107


Problem Description
Because of the wrong status of the bicycle, Sempr begin to walk east to west every morning and walk back every evening. Walking may cause a little tired, so Sempr always play some games this time. 
There are many stones on the road, when he meet a stone, he will throw it ahead as far as possible if it is the odd stone he meet, or leave it where it was if it is the even stone. Now give you some informations about the stones on the road, you are to tell me the distance from the start point to the farthest stone after Sempr walk by. Please pay attention that if two or more stones stay at the same position, you will meet the larger one(the one with the smallest Di, as described in the Input) first.


Input
In the first line, there is an Integer T(1<=T<=10), which means the test cases in the input file. Then followed by T test cases. 
For each test case, I will give you an Integer N(0<N<=100,000) in the first line, which means the number of stones on the road. Then followed by N lines and there are two integers Pi(0<=Pi<=100,000) and Di(0<=Di<=1,000) in the line, which means the position of the i-th stone and how far Sempr can throw it.


Output
Just output one line for one test case, as described in the Description.


Sample Input
2
2
1 5
2 4
2
1 5
6 6


Sample Output
11
12

题目大意是路上有很多石头,当你遇到奇数序列的石头就把他向前仍,偶数的不动他,如果两个石头一起,先考虑可以仍的比较近的石头仍也就是比较大的石头,这样一直下去,直到前面所有的石头都不可以仍了为止,求最远的石头距离起点多少题目这题用优先队列非常方便.

分析;可以定义一个结构体,分别存储石头现在的位置和能能出去的距离到优先队列中,然后每次取最小的,如果取得是偶数个就不动,取得是奇数个就要更新该石头的位置并重新存到优先队列中,直到队列空,输出最后一个石头的位置

数据分析:程序的时间复杂度是Onlogn,数据量最大为100,000,不会超时。要特别注意多个石头的x一样的情况,要优先考虑y值最小的那块石头

参考代码:

 1 #include<iostream>
2 #include<cstdlib>
3 #include<cstdio>
4 #include<cstring>
5 #include<algorithm>
6 #include<cmath>
7 #include<queue>
8 using namespace std;
9 struct Stone{
10 int x; //石头的初始地
11 int y; //石头能扔的最远距离
12 };
13 bool operator<( Stone a, Stone b )
14 { //重载小于,按照结构体中x小的在队顶,如果x一样,则按照y的最小的在//队顶
15 if( a.x== b.x ) return a.y > b.y;
16 return a.x > b.x;
17 }
18 int main()
19 {
20 int t;
21 scanf("%d",&t);//测试数据个数
22 while(t--)
23 {
24 int n;
25 int i ;
26 priority_queue<Stone>que; //定义一个Stone成员的优先//队列
27 scanf("%d",&n);
28 Stone tmp;
29 for(i =0;i< n ; i++ )
30 {
31 scanf("%d%d",&tmp.x,&tmp.y);
32 que.push(tmp);//入队
33 }
34 int sum =1;//判断碰到的是第几个石头的标记
35 while(!que.empty())//当队列为空就跳出循环,也就是说再//向前就没有石头可以遇到
36 {
37 tmp = que.top();//去队顶元素,也就是在后面的所有//石头中第一个碰到的石头
38 que.pop();//出对
39 if(sum%2)
40 {//如果是奇数号石头,则处理,否则不做处理
41 tmp . x+=tmp.y;//则向前扔y单位长度
42 que.push(tmp);//扔出去的石头入队
43 }
44 sum++;//石头计数+1
45 }
46 printf("%d\n",tmp.x);//打印最后一块石头的坐标就是所求//的最远距离
47 }
48 return 0;
49 }

  

转载于:https://www.cnblogs.com/ACShiryu/archive/2011/07/18/2109973.html

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

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

相关文章

信息安全主动攻击和被动攻击_信息安全中的主动和被动攻击 网络安全

信息安全主动攻击和被动攻击安全攻击 (Security Attacks) The attack in cryptography means that our data or sent messages or any kind of information is accessed by some anonymous user without our permission. An attack simply means to alter, destroy, implant or…

小光棍数

描述 最近Topcoder的XD遇到了一个难题&#xff0c;倘若一个数的三次方的后三位是111&#xff0c;他把这样的数称为小光棍数。他已经知道了第一个小光棍数是471,471的三次方是104487111&#xff0c;现在他想知道第m&#xff08;m<10000000000&#xff09;个小光棍数是多少&a…

线性表---双链表

双链表是单链表的拓展&#xff0c;单链表结点中只有一个指向其后继的指针&#xff0c;双链表有两个结点&#xff0c;一个指向其后继的指针&#xff0c;另一个指向前驱。 为什么要引入双链表呢&#xff1f; 这就要说单链表只有一个指针了&#xff0c;使得单链表只能从结点依次顺…

ppt形状html,PPT如何才能高大上?“形状”在PPT有这些妙用

【PConline 技巧】在PPT中&#xff0c;形状的用法非常丰富。可以说一份优秀的PPT&#xff0c;随处都能见到形状的影子。今天我们就和大家分享几组形状的特殊用法。其实很多时候&#xff0c;你会发现形状有时并不仅仅是形状&#xff01;1.突出标题标题在PPT中的作用不言而喻&…

用随机整数填充缺失值_输入一个整数值并在C中用零填充进行打印

用随机整数填充缺失值Input an integer value and we have to pad the value by Zeros in C. 输入一个整数值&#xff0c;我们必须在C中用零填充该值。 Example: 例&#xff1a; Input:Enter an integer value: 12 Output: 2 digit padding: 123 digit padding: 0124 digit p…

二分图匹配----匈牙利算法之二

poj 1469 COURSES//题意:现在有p门课程和n个学生,现在需要有由p个学生组成的组织,该组织满足每个学生代表一门课程以及每门课程只能由一个学生代表,//现给出每门课程都有哪些学生可以参加,要求判断是否存在满足题意所需要的组织.//求解二分图的最大匹配数,如果与p相等就输出&qu…

FileSystemObject简介及应用

提示:刚一开始看到有这样的功能&#xff0c;我也受骗了&#xff0c;以为真的可以通过浏览器在访问者的硬盘上创建文件&#xff0c;因为我开始试了一下真的可以&#xff0c;不信你把下面这段代码COPY到一个HTML文件当中再运行一下&#xff01; <script language"JavaScr…

C——画图

描述 计算机画图也挺有趣的哈&#xff01;那我们就来用计算机画幅图吧。。。 输入 输入一个正整数N&#xff08;0< N<10&#xff09;&#xff0c;表示要输出的正方形的边上*的个数 输出 输出一个满足题意的正方形 样例输入 4 样例输出 **** **** **** **** …

线性表----循环链表和静态链表

1、循环链表 1.1 循环单链表 循环单链表和单链表的区别在于&#xff0c;表中最后一个结点指针不在是null&#xff0c;而是头指针&#xff0c;从而使整个链表形成一个环 此时判断单链表是否为空&#xff0c;条件就是头结点的指针是否等于头指针此时单链表相当于一个环&#…

html下拉框选中第二个,html通过点击第一个select改变第二关select的内容

地址联动select {width: 100px;padding: 5px;font-size:16px;}选择地址//定义省市的信息var provList [‘江苏‘,‘浙江‘,‘福建‘,‘湖南‘];var cityList [];cityList[0] [‘南京‘, ‘苏州‘, ‘宿迁‘, ‘扬州‘];cityList[1] [‘杭州‘, ‘温州‘, ‘宁波‘, ‘台州‘…

关于Asp.Net开发中导入外部JavaScript文件的问题

一直认为在html元素应用的时候&#xff0c;每个元素大都这样子(<hr />或者<script />)格式就对的&#xff0c;但今天就发现了&#xff0c;其实在不同的开发中是不一样的&#xff0c;这次遇到的就是导入外部Js文件的问题。之前我是如此写的&#xff1a; <script …

n个节点的二叉树n+1_使用C ++程序将链接列表中的最后N个节点附加到第一个

n个节点的二叉树n1Given a linked list and an integer n, append the last n elements of the LL to front. Assume given n will be smaller than length of LL. 给定一个链表和一个整数n&#xff0c;将LL的最后n个元素附加到前面。 假设给定的n将小于LL的长度。 Input form…

生活更多仓桑。

吃完房&#xff0c;到了房间&#xff0c;又把音乐开的最大声。听听一些呐感不平&#xff0c;可以发泄情感的歌。 现在听的是《浪人情歌》&#xff0c;不要再承受&#xff0c;要把你忘记。这些年来&#xff0c;自已为了她真的是付出了很多&#xff0c;但结果还是这样&#xf…

利用kali的msf提取汇编机器码(shellcode)

对于提取小段汇编的机器码&#xff0c;kali的msf提取汇编机器码非常方便 比如提取下面小段的汇编机器码 push 5 ;5SW_SHOWpush eaxmov eax,0x755bdab0call eax首先输入 msf-nasm_shell //注意msf和-之间没有空格然后依次输入命令 将上面内容复制到一个文本编辑器里&#x…

A+B Problem(V)

描述 做了AB Problem之后&#xff0c;Yougth感觉太简单了&#xff0c;于是他想让你求出两个数反转后相加的值。帮帮他吧 输入 有多组测试数据。每组包括两个数m和n&#xff0c;数据保证int范围&#xff0c;当m和n同时为0是表示输入结束。 输出 输出反转后相加的结果。 样…

Java中interrupted()和isInterrupted()之间的区别

Java中的interrupted()和isInterrupted() (interrupted() and isInterrupted() in Java) Here, we will see how isInterrupted() differs from interrupted() in Java? 在这里&#xff0c;我们将看到isInterrupted()与Java中的interrupted()有何不同&#xff1f; isInterrup…

DevExpress xtraTabbedMdiManager控件双击关闭MDI标签页

DevExpress .net组件包中&#xff0c;有一个组件是xtraTabbedMdiManager&#xff0c;可以将MDI窗口显示为TabControl的样式&#xff0c;可以说非常实用。可惜的是&#xff0c;关闭标签页&#xff08;即子MdiChild)不能通过双击来实现&#xff0c;这对于用惯了傲游等软件的朋友来…

计算机在线应用竖式,‎App Store 上的“竖式计算器”

加减乘除开根号竖式计算器大全。竖式计算是指在计算过程中列一道竖式计算&#xff0c;使计算简便。竖式计算贯穿整个的小学数学学习过程&#xff0c;是小学生必须掌握的必备技能。本竖式计算器支持加法竖式、减法竖式、乘法竖式、除法竖式、算术平方根竖式&#xff0c;完美支持…

线性表------栈

1、基本概念 栈&#xff1a;只允许在一端插入或删除操作的线性表栈底&#xff08;buttom&#xff09;&#xff1a;固定的&#xff0c;不允许进行插入和删除操作的另一端栈顶&#xff08;top&#xff09;&#xff1a;线性表允许插入和删除的一段 栈是线性表&#xff0c;只不过受…

Linux mmap

原文地址&#xff1a;http://www.cnblogs.com/feisky/archive/2009/11/11/1600986.html Linux提供了内存映射函数mmap, 它把文件内容映射到一段内存上(准确说是虚拟内存上), 通过对这段内存的读取和修改, 实现对文件的读取和修改, 先来看一下mmap的函数声明: 头文件: <unist…