zoukankan      html  css  js  c++  java
  • 洛谷P4053 [JSOI2007]建筑抢修

    放题解

    题目传送门

    放代码

    #include <bits/stdc++.h>//万能头 
    
    #define MAXN 150000//最多的建筑数量(数据范围) 
    
    using namespace std;
    
    inline int read()//快读
    {
        int ret=0,f=1;
        char ch=getchar();
        while (ch<'0'||ch>'9')
        {
            if (ch=='-') f=-f;
            ch=getchar();
        }
        while (ch>='0'&&ch<='9') ret=ret*10+ch-'0',ch=getchar();
        return ret*f;
    }
    
    int n,T,ans;//n即题中N指建筑总数 T指修复时经过了多长时间 ans即题中S一共能修复的建筑数
    
    struct node//储存每个建筑的信息
    {
        int w; //w为修理这个建筑所用时间 (T1)
        int t;//t为这个建筑报废时间 (T2)
    } a[MAXN];
    
    priority_queue<int> Q;//优先队列()
    
    bool cmp (node x, node y)//sort排序规则
    {
        return x.t < y.t;//按t从小到大排序
    }
    int main()
    {
        n=read();//快读读入建筑总数
        for(int i = 1; i <= n; i++)//经典循环读入
        {
            a[i].w=read();// 快读读入这个建筑所用时间 (T1)
            a[i].t=read();//快读读入这个建筑报废时间 (T2)
        }
        sort(a + 1, a + n + 1, cmp);//含规则的排序(按t从小到大排序cmp为规则)
        for(int i = 1; i <= n; i++) 
        {
            if(T + a[i].w > a[i].t)//如果无法修复此建筑
            {
                if(a[i].w < Q.top())//ai < aj
                {
                    T -= Q.top();//注意这里要减掉
                    Q.pop();
                    Q.push(a[i].w);
                    T += a[i].w;
                }
            }
            else//能修复此建筑 
            {
                Q.push(a[i].w);
                ans++;
                T+=a[i].w;
            }
        }
        cout<<ans<<endl;//输出答案 
        return 0;
    }

    放数据

    4
     
    100
    200
    200
    1300
    1000
    1250
    2000
    3200
    输出:3
    事实并非理所当然❤️世界总是欲盖弥彰ღゝ◡╹)ノ♡
  • 相关阅读:
    H 指数 II(leetcode)
    找两个和为目标值且不重叠的子数组(leetcode)
    冗余链接
    那就别担心了 (30分) PTA
    排座位(newcoder)
    倒水(newcoder)
    文献随笔目录03
    基于ASP.NET的高校教学质量监控系统研究随笔
    基于ASP.NET技术的马铃薯专家系统的构建随笔
    高校贫困生评定管理系统设计随笔
  • 原文地址:https://www.cnblogs.com/liuyuxinblog/p/10792868.html
Copyright © 2011-2022 走看看