zoukankan      html  css  js  c++  java
  • [恢]hdu 1896

    2011-12-24 21:46:41

    地址:http://acm.hdu.edu.cn/showproblem.php?pid=1896

    题意:n个石头,每个在位置p,一个属性d。从最左边开始往右走,遇到一个石头,如果是第奇数次遇到,就把他往前仍d米,偶数次遇到就越过。问最后最远的石头距离起点多少米。

    mark:10w个石头,如果不扔 第一次会越过5w个,还剩5w个。依次分析,最后其实总操作不到20w。用优先队列,O(nlgn)。

    不会用STL,用手写堆实现了一个优先队列,居然1A。

    代码:

    # include <stdio.h>


    typedef struct node{
    int p, d ;
    }node ;


    node heap[200000] ;
    int len = 1 ;


    int isless(node a, node b)
    {
    if (a.p != b.p) return a.p < b.p ;
    else return a.d < b.d ;
    }


    void enqueue(int p, int d)
    {
    int r ;
    node t ;
    heap[len].p = p, heap[len].d = d ;
    r = len ++ ;
    while (r != 1)
    {
    if (isless(heap[r], heap[r/2]))
    t = heap[r], heap[r] = heap[r/2], heap[r/2] = t ;
    else break ;
    r /= 2 ;
    }
    }

    void heapify(int r)
    {
    node t = heap[r] ;
    if (r*2 < len && isless (heap[r*2], t))
    t = heap[r*2] ;
    if (r*2+1 < len && isless (heap[r*2+1], t))
    t= heap[r*2+1] ;
    if (t.p==heap[r].p && t.d == heap[r].d) return ;
    if (t.p==heap[r*2].p && t.d == heap[r*2].d)
    {
    heap[r*2] = heap[r] ;
    heap[r] = t ;
    heapify(r*2) ;
    }
    else
    {
    heap[r*2+1] = heap[r] ;
    heap[r] = t ;
    heapify(r*2+1) ;
    }
    }


    void dequeue(int *pp, int *pd)
    {
    node t ;
    t = heap[1], heap[1] = heap[len-1], heap[len-1] = t ;
    len-- ;
    heapify(1) ;
    *pp = t.p, *pd = t.d ;
    }


    int empty()
    {
    return (len == 1) ;
    }


    int max(int a, int b){return a>b?a:b;}


    int main ()
    {
    int T, n, p, d, cnt, ans ;
    scanf ("%d", &T) ;
    while (T--)
    {
    scanf ("%d", &n) ;
    while (n--)
    {
    scanf ("%d%d", &p, &d) ;
    enqueue(p, d) ;
    }
    cnt = 1 ;
    ans = 0 ;
    while (!empty())
    {
    dequeue(&p, &d) ;
    ans = max(ans, p) ;
    if (cnt&1)
    {
    p+=d;
    enqueue(p,d) ;
    }
    cnt++ ;
    }
    printf ("%d\n", ans) ;
    }
    }



  • 相关阅读:
    godaddy的win主机发邮件的组件
    读取excel的时候,往往多了很多空白行,下面的代码是去掉空白行的
    where泛型约束
    博客园页面有问题,
    今晚就出发回家啦!!!!
    呵呵,日期小小技巧
    获取设置本地当前默认打印机
    Queue Explorer过期处理
    SQL多关键字查询 并按精确度排序
    python 高阶函数
  • 原文地址:https://www.cnblogs.com/lzsz1212/p/2315340.html
Copyright © 2011-2022 走看看