hdu 1896 stones
来源:互联网 发布:网络奇谈 恐惧鸟 txt 编辑:程序博客网 时间:2024/06/06 19:52
题目
遇到第奇数块石头时,他会将其往前面扔,能扔多远在输入中会给出,而遇到第偶数个石头时不进行处理。当有两个石头在同一位置时,则先处理"射程"(能扔的距离最短)的石头,然后Sempr一直往前走,直到前面已经没有任何石头时,这时候计算Sempr与出发点的距离。
样例解析:
对于样例1的分析:一开始的时候遇到的是第一个石头,他的坐标是1,然后往前扔了5个单位之后,坐标变成6,随后继续往前走,开始遇到第二个石头(坐标是2),忽略,然后继续往前走,又遇到了原来的第一个石头(现在是第三个石头),但是它此时坐标为6,往前扔了5个单位之后,坐标变成11,然后继续往前走,一直走在坐标11时,这时候他遇到的是第四个石头,因此忽略不计。至此,前面已经没有石头了,因此此时离坐标原点的距离为11。
解题思路:
因此有了以上的分析,我们可以运用优先队列解决上述问题,先将每个石头的位置及其能够扔的距离封装成一个结构体,然后再根据小根堆的思想重载
优先队列的优先级即可。利用一个bool变量来控制奇偶,奇数时处理,偶数时不处理。
#include<cstdio>#include<algorithm>#include<queue>using namespace std;struct Node{ int pos; int dis; //表示能够扔的距离 friend bool operator <(Node a,Node b){ if(a.pos==b.pos){ return a.dis > b.dis; } return a.pos > b.pos; //从小到大排 }};int main(){ int T,N; int P,D; scanf("%d",&T); while(T--){ priority_queue <Node> que; Node node; scanf("%d",&N); for(int i = 1;i <= N;++i){ scanf("%d %d",&node.pos,&node.dis); que.push(node); } bool tmp = true; //用于切换奇偶 while(!que.empty()){ node = que.top(); que.pop(); if(tmp){ node.pos += node.dis; que.push(node); //将扔到远方的石头继续加入队列中 } tmp = !tmp; //偶数个不处理 } printf("%d\n",node.pos); } return 0;}
这道题用了运算符重载,这是第一次试着去把它搞懂,之前看的那个博客用的是class A {public: ……}的方法,但是看不懂,之后看到有用struct A{ ……};写的,结果把之前那个改了,发现也可以。
下面这链接说了,class 与 struct 的区别:
http://blog.csdn.net/fefe82/article/details/37730545
支持运算符重载和定义新运算符的语言:
PostgreSQL的SQL方言
Ruby
Haskell
支持运算符重载的语言:
Ada
C++
C#
D
Perl
Python
Pico(某种程度上)
Pascal(仅Free Pascal Dialect)
FreeBASIC
Visual Basic(需要 Visual Basic .NET 2008 或更高版本)
不支持运算符重载的语言:
C
Delphi
Java
Objective-C
- HDU 1896 Stones
- HDU 1896 Stones
- hdu 1896 Stones
- HDU 1896 Stones
- HDU 1896 Stones
- hdu 1896 Stones
- hdu 1896 stones 队列
- hdu 1896 stones
- HDU 1896 Stones
- HDU-1896-Stones
- HDU 1896 Stones (Priority_queue)
- HDU 1896 Stones
- HDU 1896 Stones
- hdu 1896 Stones
- HDU 1896 Stones
- hdu 1896 Stones
- HDU-1896-Stones
- HDU 1896 Stones
- (C++版)链表(三)——实现双向链表的创建、插入、删除等简单操作
- 在PAT这个oj中还是scanf和printf的耗时少于cin和cout
- 利用栈结构实现四则运算求值
- STM32定时器定时计算公式
- sublime3 文件头注释和函数注释 [ filehead DocBlocker ]
- hdu 1896 stones
- Android开发笔记: Android studio 实现国际化
- Android studio打包混淆编译的时候出现异常:transformClassesAndResourcesWithProguardForRelease
- 电影 《模仿游戏》
- 写给所有程序员_那些年我们常用的设计模式
- Java算法实现之快速排序
- 数据库MYSQL入门教程(1)——安装指南
- Django 博客
- (C++版)链表(四)——实现双向循环链表创建、插入、删除等简单操作