P4053 建筑抢修(优先队列维护反悔贪心)

https://www.luogu.com.cn/problem/P4053

题意:

给 n 个建筑,每个建筑有一个维修时间 T1,如果在 T2 时间内还没维修完,就报废了,只能一个一个维护建筑,问最多为维修几个建筑

样例:

4
100 200
200 1300
1000 1250
2000 3200
3

 思路:

将所有建筑按照报废时间排序,然后一次遍历,如果可以修的话一定要修,并把修这个建筑需要的时间 T1 放进优先队列维护

如果修不了的话,判断 修这个建筑的时间 和 堆顶元素(之前修建筑的最大时间),如果比之前时间小的话,进行反悔操作,即不修之前的那个建筑,改修现在的建筑,由于按照报废时间排序,当前建筑一定不会报废,实现反悔贪心。

代码:

#include<bits/stdc++.h>
#define endl '\n'
#define debug(x) cout<<#x<<" = "<<x<<endl;
using namespace std;
typedef long long ll;
typedef pair<ll,ll> pii;

#define int long long

void solve(){
    int n;
    cin>>n;
    vector<pii>a(n+1);
    for(int i=1;i<=n;i++){
        cin>>a[i].first>>a[i].second;
    }
    sort(a.begin()+1,a.end(),[&](pii aa,pii bb){return aa.second<bb.second;});
    int ans=0,now=0;
    priority_queue<int>pq;
    for(int i=1;i<=n;i++){
        int t1=a[i].first,t2=a[i].second;
        if(now+t1<=t2){
            ans++;
            now+=t1;
            pq.push(t1);
        }
        else if(t1<pq.top()){
            int t=pq.top();
            pq.pop();
            now-=t;
            now+=t1;
            pq.push(t1);
        }
    }
    cout<<ans<<endl;
}

signed main(){

    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int T=1;
   // cin>>T;
    while(T--){
        solve();
    }

    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
沉箱重力式码头是一种常见的码头结构,由许多沉箱和重力块组成,通常用于大型商港和码头。由于其结构较为复杂,容易受到环境因素的影响,例如风暴潮、海浪等,因此在使用过程中可能会出现毁伤情况。在这种情况下,需要进行抢修和抢建工作,以下是相关技术知识介绍: 1. 沉箱重力式码头的基础维护 沉箱重力式码头的基础结构是其最重要的部分,因为所有的重力块和沉箱都是基于此进行支撑的。因此,保持基础的完整性和稳定性是非常重要的。定期检查基础是否有损坏或者裂缝,如果发现问题,必须及时进行修复。 2. 沉箱重力式码头的沉箱维护 沉箱是码头的主要结构之一,其作用是支撑码头上方的重力块,并通过自身重力来保持稳定。因此,沉箱的完整性和稳定性对于码头的安全至关重要。定期检查沉箱是否有损坏或者漏水,如果发现问题,必须及时进行修复。 3. 沉箱重力式码头的重力块维护 重力块是码头的另一主要结构,其作用是通过自身重力来支撑码头上方的设施。重力块通常由混凝土制成,因此,定期检查其完整性和稳定性也是非常重要的。如果发现问题,必须及时进行修复或者更换。 4. 抢修和抢建技术 如果沉箱重力式码头出现了毁伤情况,需要进行抢修和抢建工作。抢修技术通常使用钢筋混凝土进行修补,通过使用钢筋和混凝土来加强受损部分的结构。抢建技术则需要使用各种机械设备,例如吊车、砂石车等,对受损部分进行重建。 总之,沉箱重力式码头是一种重要的码头结构,其完整性和稳定性对于码头的安全至关重要。定期检查和维护是必要的,如果出现毁伤情况,需要及时进行抢修和抢建工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Auroraaaaaaaaaaaaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值