• 带结构体的优先队列


    hdu-1896

    问题描述:路上有一些石头(位置,所抛出的距离),如果遇到的是奇数块石头,则向前抛,偶数块石头就让它放在原地不管。如果遇到位置相同的两块石头,就假设抛出距离近的石头先遇到。

    思路:遇到奇数块石头,(位置=位置+距离,距离)入栈,偶数则不管,直至栈空为止


    #include <cstdio>
    #include <queue>
    #include <vector>
    using namespace std;

    struct Node
    {
        int p,d;
    }node;

    struct cmp
    {
        bool operator() (Node &x,Node &y)
        {
            if( x.p== y.p) return x.d > y.d;
            return x.p > y.p;
        }
    };
    int main()
    {
        int T,n;
        scanf("%d",&T);
        priority_queue<Node,vector<Node>,cmp> que;
        while(T--)
        {
            scanf("%d",&n);
            for(int i = 0; i< n;i++)
            {
                scanf("%d%d",&node.p,&node.d);
                que.push(node);
            }
            int cnt = 0;
            while(!que.empty())
            {
                cnt++;
                node = que.top();
                que.pop();
                if(cnt%2 == 1)
                {
                    node.p+=node.d;
                    que.push(node);
                }
            }
            printf("%d ",node.p);
        }
        return 0;
    }
    /*
    #include<iostream>
    #include<cstdlib>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    #include<queue>
    using namespace std;
    struct Stone{
        int x;    //石头的初始地
        int y;    //石头能扔的最远距离
    };
    bool operator<( Stone a, Stone b )
    {
        if( a.x== b.x ) return a.y > b.y;
        return a.x > b.x;
    }
    int main()
    {
        int t;
        scanf("%d",&t);
        while(t--)
        {
            int n;
            int i ;
            priority_queue<Stone>que;
            scanf("%d",&n);
            Stone tmp;
            for(i =0;i< n ; i++ )
            {
                scanf("%d%d",&tmp.x,&tmp.y);
                que.push(tmp);
            }
            int sum =1;
            while(!que.empty())
            {
            tmp = que.top();
                que.pop();
                if(sum%2)
                {
                    tmp . x+=tmp.y;
                    que.push(tmp);
                }
                sum++;
            }
            printf("%d ",tmp.x);
        }
        return 0;
    }
    */

  • 相关阅读:
    不懂的问题
    自我介绍
    《java程序设计》周结 (8)
    201671010143 201620173《java面向程序》周结
    201671010143 201620172《java程序设计》周结
    201671010143 201620172 《Java程序设计》周结
    201671010143 201620172 《Java程序设计》 初学者对于JAVA的简单认识和了解
    201671010143 20162017《Java程序设计》周结
    本章的知识点 Java 接口
    第三次作业
  • 原文地址:https://www.cnblogs.com/unknownname/p/7846335.html
Copyright © 2020-2023  润新知