程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> HDU 1896 Stones (Priority_queue)

HDU 1896 Stones (Priority_queue)

編輯:C++入門知識

HDU 1896 Stones (Priority_queue)


 

【題目大意】:

就是說在一條直線道路上有n個石頭,往前走,遇到一個數一個,如果遇到的是第奇數個那就把這個石頭往前扔距離dis[i], 如果是第偶數個,就放置不管。
問人走到最後一個石頭的位置距原地多遠(遇到的最後一個石頭距離出發點的位置是多少)。

【思路】模擬即可,遇到第奇數個石頭,就將其加上dis[i],放回到優先隊列(priority_queue)中,然後再去掉一個石頭

代碼:

 

/*
* Problem: HDU No.1896
* Running time: 280MS
* Complier: G++
* Author: javaherongwei
* Create Time:  14:00 2015/9/17 星期四
*/

#include 
#include 
#include 
#include 
#include 

using namespace std;

struct node
{
    int codr;
    int dis;
    bool operator <(const node t)const //小的優先級大
    {
       if(t.codr!=codr) return codr>t.codr;
       return dis>t.dis;
    }
}ST;
priority_queue que;
int main()
{
    int t;scanf(%d,&t);
    while(t--)
    {
        int n;scanf(%d,&n);
        while(!que.empty()) que.pop();
        for(int i=1; i<=n; ++i)
        {
            scanf(%d %d,&ST.codr,&ST.dis);
            que.push(ST);
        }
        int ll=1;
        while(!que.empty())
        {
            ST=que.top();que.pop();
            if(ll&1)                //將奇數的石頭求和距離,每次求和完重新扔進隊列中
            {
               ST.codr+=ST.dis;
               que.push(ST);
            }
            ll++;
        }
        printf(%d
,ST.codr);
    } return 0;
}


 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved