202104 CSP认证 | DHCP服务器

3. DHCP服务器

在这里插入图片描述

我天呢经历了带配额的文件系统我真的极其挫败,然后开始写的时候觉得这个题感觉怎么有点简单…然后就觉得肯定是自己有很多东西没有想到,而且写的时候破罐子破摔觉得肯定会超时…
结果一写!哦买噶居然满分了!
脑子不清醒的时候写的差不多也就两个小时不到吧,天哪第三题要是是这种难度也太幸福了orz

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e5 +10;
string H;
ll M, Tdef, Tmax, Tmin;
map<string, set<ll> > user_ip;struct Ip{   //定义一个IP结构体int status = 1; //1表示未分配,2表示待分配,3表示占用,4表示过期string user = "";ll ddl = 0;
};
Ip ipPool[N];  //定义一个IP池bool compare(string a, string b)
{if(a.size() != b.size()) return false;for(int i = 0;i < a.size();i ++){if(a[i] != b[i])return false;}return true;
}
//在每个时刻前进行检查
void check(ll t)
{for(ll i = 1;i <= M;i ++){if(ipPool[i].ddl && t >= ipPool[i].ddl){if(ipPool[i].status == 2){   //待分配状态ipPool[i].status = 1;string user = ipPool[i].user;ipPool[i].user = "";ipPool[i].ddl = 0;user_ip[user].erase(i);if(!user_ip[user].size())user_ip.erase(user);}else if(ipPool[i].status == 3){  //占用变为过期ipPool[i].status = 4;ipPool[i].ddl = 0;}}}
}
void Discover(const ll t,const string from,const string to,const ll ddl)
{ll id; bool flag = false;if(to != "*")  return;if(user_ip.count(from)){id = *user_ip[from].begin();  //取出第一个flag = true;}else {for(ll i = 1;i <= M ;i ++){if(ipPool[i].status == 1){id = i;flag = true;break;}}for(ll i = 1;i <= M && !flag;i ++){if(ipPool[i].status == 4){id = i;string user = ipPool[i].user;user_ip[user].erase(i);if(!user_ip[user].size()) user_ip.erase(user);flag = true;break;}}}if(!flag) return;ipPool[id].status = 2;ipPool[id].user = from;user_ip[from].insert(id);ll overtime;if(!ddl) overtime = t + Tdef;else{if(ddl - t >= Tmin && ddl - t <= Tmax) overtime = ddl;else if(ddl - t > Tmax) overtime = t + Tmax;else overtime = t + Tmin;}ipPool[id].ddl = overtime;cout << H <<' '<<from<<' '<<"OFR "<<id<<' '<<overtime<<"\n";
}void Request(const ll t,const string from,const string to,const ll ip,const ll ddl)
{if(to == "*") return;if(!compare(to, H)){auto temp = user_ip[from];for(auto x : temp){if(ipPool[x].status == 2){ipPool[x].status = 1;ipPool[x].user = "";ipPool[x].ddl = 0;user_ip[from].erase(x);}}if(!user_ip[from].size()) user_ip.erase(from);return;}if(ip >= 1 && ip <= M && compare(ipPool[ip].user, from)){ipPool[ip].status = 3;ll overtime;if(!ddl) overtime = t + Tdef;else{if(ddl - t >= Tmin && ddl - t <= Tmax) overtime = ddl;else if(ddl - t > Tmax) overtime = t + Tmax;else overtime = t + Tmin;}ipPool[ip].ddl = overtime;cout << H <<' '<<from<<' '<<"ACK "<<ip<<' '<<overtime<<"\n";}else{  //发送Nak报文cout << H <<' '<<from<<' '<<"NAK "<<ip<<' '<<0<<"\n";}
}
int main()
{ll n;cin >> M >> Tdef >> Tmax >> Tmin >> H;cin >> n;for(ll i = 1;i <= M;i ++){ipPool[i].status = 1;ipPool[i].ddl = 0;ipPool[i].user = "";}while(n --){ll t, ip ,ddl;string from, to , type;cin >> t >> from >> to >> type >> ip >> ddl;check(t);if(type == "DIS"){Discover(t,from,to,ddl);}else if(type == "REQ"){Request(t, from, to, ip, ddl);}}return 0;
}

当你感觉第三题写不下去了就来写DHCP服务器吧!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/729914.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【探索Linux】—— 强大的命令行工具 P.26(网络编程套接字基本概念—— socket编程接口 | socket编程接口相关函数详细介绍 )

阅读导航 引言一、socket 常见API表二、函数详细介绍01. socket()02. bind()03. listen()04. accept()05. connect()06. send()07. recv()08. close()09. select()10. getaddrinfo()11. sendto()12. recvfrom()13. setsockopt()14. getsockopt()15. shutdown()16. inet_pton()1…

【SpringBoot】多环境切换的灵活配置

文章目录 profile 的使用激活 profile 的方式命令行启动idea 中配置配置文件中激活 开发中最灵活的多环境配置创建四个配置主配置文件其他几个环境配置使用方式 配置文件拆分总结 在日常的开发中&#xff0c;一般都会分好几种环境&#xff0c;比如通常的 开发环境&#xff1a;一…

EXSI create datastore

文章目录 1. 简介2. 清空磁盘3. 删除表4. 创建database 1. 简介 在 ESXi 环境中创建数据存储(Datastore)的步骤如下: 登录 vSphere Web Client 打开 Web 浏览器,输入 ESXi 主机或 vCenter Server 的 IP 地址,使用有权限的账户登录。 在 ESXi 环境中创建数据存储(Datastore)…

每天一个数据分析题(一百九十六)

在多元线性回归模型的自变量选择方法中&#xff0c;关于向后回归法和逐步回归法的描述&#xff0c;以下哪些是正确的&#xff1f; A. 向后回归法开始时包含所有自变量&#xff0c;并逐步剔除每个不显著的变量。 B. 逐步回归法结合了向前回归法和向后回归法&#xff0c;可以在…

Linux 关于NTP同步硬件时钟的可靠性验证

Linux关于NTP同步硬件时钟的可靠性验证 1. 常见的时钟类型1.1 系统时钟1.2 硬件时钟 2. 常见时钟同步方式2.1 ntpd服务2.1.1 推荐配置/etc/ntp.conf2.1.2 推荐配置/etc/sysconfig/ntpd 2.2 定时任务ntpdate2.3 ntp命令同步状态相关命令解读2.3.1 ntpq -pn解读2.3.2 ntpdate -u解…

SpringCloud Ribbon 负载均衡服务调用

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第三篇&#xff0c;即介绍 Ribbon 负载均衡服务调用 二、概述 2.1 Ribbon 是什么 Spring Cloud Ribbon…

OpenCV学习笔记(三)——对于图片的基本操作

目录 读取图片和显示图片 显示图片的大小 将图像设置为灰度图 将图片重新写回指定的地址 显示图片的尺寸 获取图片的类型 读取图片和显示图片 在OpenCV使用cv2.imread()来读取图片&#xff0c;例如&#xff0c;在D盘的Photo的文件夹中有一张图片名称为1的jpeg的图片&am…

MySQL-MVCC:概述、工作原理、readView实现快照读、数据库解决问题、MVCC无法防止超卖

MySQL-MVCC&#xff1a;概述、工作原理、readView实现快照读、数据库解决问题、MVCC无法防止超卖 一、概述二、MVCC工作原理三、readView实现快照读四、MVCC 可以为数据库解决什么问题五、MVCC无法防止超卖 一、概述 多版本并发控制&#xff08;Multi-Version Concurrency Con…

无法使用debugger,debugger在项目中不生效,导致无法有效排查问题

debugger是浏览器提供的调试语句&#xff0c;其主要是通过停止JS的执行&#xff0c;相当于设置断点。它的使用方法很简单&#xff0c; 只需要在我们的JS语句中&#xff0c; 插入一行debugger; 即可。 在JS代码编写的过程中&#xff0c;我们都会通过浏览器的调试模式&#xff08…

微擎安装,卡在“安装微擎”界面

进入install.php&#xff0c;点击【在线安装】 下一步配置数据库&#xff0c;开始安装系统 然后显示进度条&#xff0c;进度条一闪而过 然后就没有进度条显示了&#xff0c;一直卡在这里 第一次等了好久&#xff0c; 删除目录下的文件&#xff0c;重装还是这样 再重启服务器&…

代码随想录算法训练营第三十九天|LeetCode62 不同路径、LeetCode63 不同路径II

62.不同路径 思路&#xff1a;确定dp数组及其下标含义&#xff0c;dp[i][j]代表到达i&#xff0c;j坐标的路径数。确定递推公式dp[i][j] dp[i-1][j]dp[i][j-1]。因为只能向右向下移动。初始化dp数组&#xff0c;dp数组的第一行第一列都为1&#xff0c;因为不能向上向左。遍历…

3D-Genome | Hi-C互作矩阵归一化指南

Hi-C 是一种基于测序的方法&#xff0c;用于分析全基因组染色质互作。它已广泛应用于研究各种生物学问题&#xff0c;如基因调控、染色质结构、基因组组装等。Hi-C 实验涉及一系列生物化学反应&#xff0c;可能会在输出中引入噪声。随后的数据分析也会产生影响最终输出噪声&…

Python Tkinter GUI 基本概念

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd;如果停止&#xff0c;就是低谷&#xf…

PostgreSQL教程(二十五):服务器管理(七)之管理数据库

每个正在运行的PostgreSQL服务器实例都管理着一个或多个数据库。因此&#xff0c;在组织SQL对象&#xff08;“数据库对象”&#xff09;的层次中&#xff0c;数据库位于最顶层。本章描述数据库的属性&#xff0c;以及如何创建、管理、删除它们。 一、概述 一个数据库是一些S…

计算机网络概论01

计算机系统基础知识 基本组成 计算机系统由硬件和软件组成。 硬件由五大部分&#xff0c;他们分别是&#xff1a; 运算器 执行算数运算和逻辑运算控制器 控制cpu的工作&#xff0c;决定了计算机运行过程的自动化。包括指令控制逻辑、时序控制逻辑、总线控制逻辑和中断控制逻辑…

node项目通过.env文件配置环境变量

https://www.npmjs.com/package/dotenv require(dotenv).config()console.log(process.env, process.env.apiKeyOnServer)我开发的chatgpt项目&#xff1a; https://chat.xutongbao.top

Linux驱动适配内核时,对于不同版本内核中有变化函数的处理

一、情景 Linux驱动适配不同内核时&#xff0c;由于内核版本的不同&#xff0c;有些函数可能没有&#xff0c;或者函数直接变化了&#xff0c;高版本可能增加了一些参数。 二、常规处理方案&#xff0c;根据内核版本判断 一般情况我们处理方式是在使用这些函数时&#xff0c…

Imagination:RISC-V CPU的重要力量

根据SHD集团最近发布的报告显示&#xff0c;RISC-V正全速发展中。通过分析从2021年到2030年这十年间RISC-V核在不同应用和功能领域的潜在市场&#xff0c;作者Rich Wawrzyniak得出结论称&#xff0c;到2030年&#xff0c;22.3%的SoC将包含RISC-V CPU&#xff0c;RISC-V的收入预…

Docker网络+原理+link+自定义网络

目录 一、理解Docker网络 1.1 运行tomcat容器 1.2 查看容器内部网络地址 1.3 测试连通性 二、原理 2.1 查看网卡信息 2.2 再启动一个容器测试网卡 2.3 测试tomcat01 和tomcat02是否可以ping通 2.4 只要删除容器&#xff0c;对应网桥一对就没了 2.5 结论 三、…

蓝牙耳机潜水时可以用吗?适合潜水的四大游泳耳机分享

在科技日新月异的今天&#xff0c;我们越来越依赖各种电子设备来丰富我们的生活。无论是运动、工作还是休闲娱乐&#xff0c;耳机都成为了我们不可或缺的伙伴之一。然而&#xff0c;当谈到水上活动时&#xff0c;许多人可能会对蓝牙耳机是否能在水下使用感到困惑。虽然市面上有…