zoukankan      html  css  js  c++  java
  • HDU 1896:Stones(优先队列)

    Stones

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

    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

     

    题意

    有n个石子,每个石子的位置和能丢出去的距离已经给了出来。如果石子是在第奇数个,将该位置的最重的石子扔出去(如果只有一个石子,不需要选;如果有多个石子,将丢出去距离最近的那个扔出去)。问最后距离起点最远的石子距离起点有多远。

    思路

    定义一个结构体的优先队列,按照题目要求设置优先级,将题目中已知的石子的位置和丢出去的距离放入优先队列中。

    然后拿出来优先队列中的最上面的石子,如果该石子在奇数位置,进行移动后重新加入到队列中;如果是偶数,不用管他。用一个数maxx记录石子到达的最远距离,当队列为空的时候,停止操作,输出maxx

    AC代码

    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include <algorithm>
    #include <math.h>
    #include <limits.h>
    #include <map>
    #include <stack>
    #include <queue>
    #include <vector>
    #include <set>
    #include <string>
    #define ll long long
    #define ms(a) memset(a,0,sizeof(a))
    #define pi acos(-1.0)
    #define INF 0x3f3f3f3f
    const double E=exp(1);
    const int maxn=1e6+10;
    using namespace std;
    struct wzy
    {
        int place,dis;
    }s;
    bool operator < (const wzy &a,const wzy &b)
    {
        if(a.place==b.place)
            return a.dis>b.dis;
        else
            return a.place>b.place;
    }
    int main(int argc, char const *argv[])
    {
    	ios::sync_with_stdio(false);
    	int t;
    	int n;
    	int p,d;
    	cin>>t;
    	while(t--)
        {
            priority_queue<wzy>que;
            cin>>n;
            for(int i=1;i<=n;i++)
            {
                cin>>p>>d;
                s.place=p;
                s.dis=d;
                que.push(s);
            }
            int maxx=0;
            for(int i=1;;i++)
            {
                if(que.empty())
                    break;
                s=que.top();
                que.pop();
                if(i%2)
                {
                    s.place+=s.dis;
                    maxx=max(s.place,maxx);
                    que.push(s);
                }
            }
            cout<<maxx<<endl;
        }
    	return 0;
    }
  • 相关阅读:
    回调函数: 一定要在函数名前加上 CALLBACK,否则有可能引起内存崩溃!
    win32-api: 让 static 控件中的水平横行,垂直居中。
    Win32-API: 终于能正常的捕获焦点事件: WM_COMMAND、BN_SETFOCUS、EN_SETFOCUS
    FindExecutable:查找与一个指定文件关联在一起的程序的文件名
    ImageMagick: win7 | win8 & uac (用户帐户控制) 注册表的一些事
    ImageMagick: 6.8.3 升级到 6.8.9 遇到的问题
    ImageMagick: DrawImage(Image*,DrawInfo*) 绘制填充图片时卡住的原因分析
    真的无语, 今天遇到一个奇葩的事情: http 会话劫持
    高DPI下界面错乱的解决方法和原理
    关于 HDC 的释放
  • 原文地址:https://www.cnblogs.com/Friends-A/p/10324438.html
Copyright © 2011-2022 走看看