首页 > 其他分享 >【堆】【贪心】网络优化

【堆】【贪心】网络优化

时间:2024-10-21 22:21:47浏览次数:1  
标签:优先 服务 int 用户数量 网络 用户 端点 优化 贪心

https://ac.nowcoder.com/acm/contest/22904/1010

思路来源:
https://www.cnblogs.com/BlankYang/p/16459928.html
@空白菌

思路描述:

  1. 输入处理:给定 n 个用户编号从 1 到 n,以及 m 条服务线,每条服务线对应一个用户区间 [l, r] 和一个最大容量 v,表示这条服务线可以为最多 v 个用户提供服务,且仅能为用户编号在 [l, r] 范围内的用户提供服务。

  2. 排序服务线:将所有服务线按照它们的左端点 l 进行排序。这样可以确保在处理每个用户时,按顺序检查该用户可能匹配的服务线。

  3. 优先队列维护当前可用服务线:使用一个优先队列(最小堆)来维护当前能够为用户提供服务的服务线。优先队列中存储服务线的右端点 r 和剩余的可用容量 v,并按照右端点 r 进行排序。这样可以确保我们优先使用那些右端点较小、即将失效的服务线。

  4. 逐个处理用户

    • 对于每个用户 i,首先移除那些右端点小于 i 的服务线,因为它们已经不能再为当前及后续用户提供服务了。
    • 检查用户 i 是否处于某些服务线的左端点 l,如果是,将这些服务线加入优先队列,因为这些服务线可以开始为用户提供服务。
    • 如果优先队列中还有可用服务线,则为当前用户选择右端点最小的服务线进行分配,并减少该服务线的剩余容量。如果服务线的容量未用完,则将其重新放回优先队列,以便后续用户继续使用。
  5. 最大化服务用户数量:通过上述操作,逐个处理每个用户,尽可能多地为用户分配可用的服务线,最终统计能够服务的用户数量。

  6. 输出结果:处理完所有用户后,输出可以服务的最大用户数量。

这种方法确保了我们以贪心策略优先分配即将过期的服务线,同时利用优先队列高效维护可用服务线的信息,从而在尽量少的计算代价下,最大化能够服务的用户数量。

#include <bits/stdc++.h>

using namespace std;

struct Cable {
    int l, r, v;
    Cable(int l_, int r_, int v_) {
        l = l_;
        r = r_;
        v = v_;
    }
};

// 比较函数,用于根据左端点l排序
bool compare(Cable a, Cable b) {
    return a.l < b.l;
}

int main() {
    int n, m;
    // 读入n(用户数量)和m(服务线数量)
    while (scanf("%d %d", &n, &m) != EOF) {
        vector<Cable> a;
        // 读入每条服务线的信息
        for (int i = 0; i < m; i++) {
            int l, r, v;
            scanf("%d %d %d", &l, &r, &v);
            a.push_back(Cable(l, r, v));
        }
        // 按照服务线的左端点l进行排序
        sort(a.begin(), a.end(), compare);
        
        // 使用小根堆,存储右端点r和剩余可容纳用户数量v
        priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq;

        int ans = 0;
        int pos = 0;  // 用来跟踪当前处理的服务线

        // 遍历每一个用户编号(从1到n)
        for (int i = 1; i <= n; i++) {
            // 移除不再覆盖当前用户编号i的服务线(即右端点小于i的)
            while (!pq.empty() && pq.top().first < i) {
                pq.pop();
            }

            // 将当前用户编号i对应的新服务线加入到堆中
            while (pos < m && a[pos].l == i) {
                pq.push({a[pos].r, a[pos].v});
                pos++;
            }

            // 如果当前有可用的服务线,分配用户
            if (!pq.empty()) {
                ans++;
                auto temp = pq.top();
                pq.pop();
                temp.second--;  // 当前服务线容纳量减少1
                // 如果服务线还未用完,重新加入堆
                if (temp.second > 0) {
                    pq.push(temp);
                }
            }
        }

        // 输出最大在线用户数
        printf("%d\n", ans);
    }

    return 0;
}

标签:优先,服务,int,用户数量,网络,用户,端点,优化,贪心
From: https://www.cnblogs.com/peterzh/p/18491512

相关文章

  • 这个大纲旨在为希望深入掌握 .vhdx 文件管理的顶尖用户提供全面的知识体系,涵盖了高级
    VHDX的英语全称是VirtualHardDiskExtendedVHDX(VirtualHardDiskExtended)在Windows虚拟化环境中的优势包括以下几个方面:1. 更大的存储容量最大容量:VHDX文件的最大容量可以达到 64TB,相比之下,传统的VHD(VirtualHardDisk)最大容量仅为 2TB。这使得VHDX更适合需要......
  • 20222315 2024-2025-3 《网络与系统攻防技术》实验三实验报告
    1.实验内容通过多次加密、文件格式欺骗、填充、加壳等技术实现shellcode免杀,产生恶意程序,并尝试通过杀毒软件,不被杀毒软件查杀。1、通过使用msf编码器,用msfvenom命令生成exe,jar等文件。2、使用veil、夹壳工具来尝试让shellcode实现免杀:3、使用C+shellcode编程;4、尝试将文件......
  • 九,网络编程UDP和TCP
    Java网络编程详解:从基础到实践网络编程是现代软件开发中不可或缺的一部分。在Java中,我们可以通过多种方式实现网络通信,其中最常用的是UDP和TCP协议。本文将详细介绍Java网络编程的基础知识、UDP和TCP编程的核心概念和实现方法。网络编程概述计算机网络定义计算机网络是指将地......
  • 粒子群算法应用——LSTM神经网络优化
    本篇文章使用粒子群算法寻找LSTM神经网络最优隐含层数和学习率等参数来改善性能。粒子群算法详见:粒子群优化算法及应用-CSDN博客LSTM神经网络详细教程可参考:神经网络之lstm-CSDN博客本文公式描述部分来自:神经网络之lstm-CSDN博客目录1LSTM基本原理1.1 LSTM简介 1.2......
  • 20222313 2024-2025-1 《网络与系统攻防技术》实验二报告
    一.实验内容实践目标(1)使用netcat获取主机操作Shell,cron启动某项任务(任务自定)(2)使用socat获取主机操作Shell,任务计划启动(3)使用MSFmeterpreter(或其他软件)生成可执行文件(后门),利用ncat或socat传送到主机并运行获取主机Shell(4)使用MSFmeterpreter(或其他软件)生成获取......
  • 20222420 2024-2025-1 《网络与系统攻防技术》实验二实验报告
    202224202024-2025-1《网络与系统攻防技术》实验二实验报告1.实验内容1.1本周学习内容1.1.1后门介绍后门概念:不经过正常认证流程而访问系统的通道后门类型:编译器、操作系统、应用程序中的后门,潜伏于OS或伪装成APP的后门程序1.1.2后门案例编译器后门:Xcode操作系统......
  • 计算机网络-网络层概述
    网络层所处的地位网络层在五层协议模型当中处于第三层的位置,它为上层的传输层提供服务。应用层的数据传输单位是报文。应用层把报文交给传输层之后,传输层会把报文拆分成报文段,紧接着传输层又把报文段交给网络层,让网络层进行传输,那网络层会在报文段的基础之上加一个首部,我们......
  • 基于深度学习CNN网络的人脸表情识别系统-带UI界面-数据集-包配置
    项目基本介绍:【算法】深度学习CNN网络mini-xception算法网络【环境】python=3.8tensorflowopencvpyqt5matplotlib等(含详细环境配置教程视频)【文件】训练、预测全部源代码、训练好的型、数据集、模型评价指标:训练acc/loss曲线图和混淆矩阵图、U1界面源码及源文件、环......
  • 【顶级EI复现】分布式电源选址定容的多目标优化算法(Matlab代码实现)
     ......
  • 【WOA-CNN-LSTM】基于鲸鱼算法优化深度学习预测模型的超参数研究(Matlab代码实现)
     ......