当前位置: 首页 > article >正文

响应报文时间

题目描述

IGMP(Internet Group Management Protocol)协议中有一个字段称为最大响应时间(Max Response Time)。当主机(HOST)收到查询报文时,会解析出 MaxResponseTime 字段,并在 ( 0 , M a x R e s p o n s e T i m e ] (0,MaxResponseTime] (0,MaxResponseTime] 时间(秒)内选取一个随机时间来回应一个响应报文。如果在这个随机时间内收到一个新的查询报文,则会根据两者时间的大小,选取较小的一方来刷新回应时间。
在这里插入图片描述

最大响应时间有如下计算方式:

M a x   R e s p   T i m e = { M a x R e s p C o d e M a x   R e s p   C o d e < 128 ( m a n t ∣ 0 x 10 ) < < ( e x p + 3 ) M a x   R e s p   C o d e ≥ 128 Max\ Resp\ Time = \begin{cases} Max Resp Code & Max\ Resp\ Code < 128 \\ (mant | 0x10) << (exp + 3) & Max\ Resp\ Code ≥ 128 \end{cases} Max Resp Time={MaxRespCode(mant∣0x10)<<(exp+3)Max Resp Code<128Max Resp Code128

注: e x p exp exp 最大响应时间的高5~7位: m a n t mant mant 为最大响应时间的低4位。

其中接收到的 M a x R e s p C o d e MaxRespCode MaxRespCode 最大值为 255,以上出现所有字段均为无符号数。

现在我们认为 HOST收到查询报文时,选取的随机时间必定为最大值,现给出 HOST 收到查询报文个数 C,HOST 收到该报文的时间T,以及查询报文的最大响应时间字段值 M,请计算出HOST 发送响应报文的时间。

输入描述
第一行为查询报文个数 C C C,后续每行分别为 HOST 收到报文时间 T T T,及最大响应时间 M M M,以空格分割

输出描述
HOST 发送响应报文的时间。

补充说明
用例确定只会发送一个响应报文, 不存在计时结束后依然收到查询报文的情况。

示例1

输入

3
0 20
1 10
8 20

输出

11

说明

收到3个报文,
第0秒收到第1个报文,响应时间为20秒,则要到0+20=20秒响应;
第1秒收到第2个报文,响应时间为10秒,则要到1+10=11秒响应,与上面的报文的响应时间比较获得响应时间最小为11秒;

第8秒收到第3个报文,响应时间为20秒,则要到8+20=28秒响应,与第上面的报文的响应时间比较获得响应时间最小为11秒;

最终得到最小响应报文时间为11秒

示例2

输入

2
0 255
200 60

输出

260

说明

收到2个报文,
第0秒收到第1个报文,响应时间为255秒,则要到(15 | 0x10) << (7 + 3)= 31744秒响应; (mant = 15,exp =7)

第200秒收到第2个报文,响应时间为60秒,则要到200+60-260秒响应,与第上面的报文的响应时间比较获得响应时间最小为260秒:

最终得到最小响应报文时间为260秒

题解

M a x   R e s p   T i m e = { M a x R e s p C o d e M a x   R e s p   C o d e < 128 ( m a n t ∣ 0 x 10 ) < < ( e x p + 3 ) M a x   R e s p   C o d e ≥ 128 Max\ Resp\ Time = \begin{cases} Max Resp Code & Max\ Resp\ Code < 128 \\ (mant | 0x10) << (exp + 3) & Max\ Resp\ Code ≥ 128 \end{cases} Max Resp Time={MaxRespCode(mant∣0x10)<<(exp+3)Max Resp Code<128Max Resp Code128

注: e x p exp exp 最大响应时间的高5~7位: m a n t mant mant 为最大响应时间的低4位。

源码

public class MaxRespTime {
	static Input input ;
	static {
		input = new Input("2\n" +
				"0 255\n" +
				"200 60");
		input = new Input("3\n" +
				"0 20\n" +
				"1 10\n" +
				"8 20");
	}

	public static void main(String[] args) {

		int n = Integer.parseInt(input.nextLine());
		int result = Integer.MAX_VALUE;
		for (int i = 0; i < n; i++) {
			String[] ss = input.nextLine().split(" ");
			int startTime = Integer.parseInt(ss[0]);
			int respTime = Integer.parseInt(ss[1]);
			if (respTime < 128) {
				result = Math.min(result, startTime + respTime);
			} else {
				int mant = respTime & 15; // 取得后四位
				int exp = respTime >> 4 & 7; // 取得 5~7位
				int resp = (mant | 0x10) << (exp + 3);
				result = Math.min(result, startTime + resp);
			}
		}
		System.out.println(result);
	}
}

http://www.kler.cn/a/372779.html

相关文章:

  • solidworks学习6吊环-20241030
  • python之数据结构与算法(数据结构篇)-- 集合
  • MFC图形函数学习04——画矩形函数
  • 探索 CrewAI:引领多智能体协作的未来
  • 北京迅为iTOP-LS2K0500开发板快速使用编译环境虚拟机Ubuntu基础操作及设置
  • 鸿蒙自定义加载 LoadingDialog
  • CPB数据集:由斯坦福大学发布,一个新的视频问题回答任务基准,能够连续且全面处理视频数据
  • Golang | Leetcode Golang题解之第521题最长特殊序列I
  • C#与C++交互开发系列(十七):线程安全
  • 查询windows或者linux上 支持的所有字体
  • 100种算法【Python版】第9篇——二分法
  • 香港海洋投资引领海洋牧场新一轮融资热潮
  • 摄像头点击器常见问题——摄像头视窗打开慢
  • 探索合成数据,在医学视觉语言预训练中的应用可行性
  • ChatTTS-ui模型概述、安装及使用方法说明
  • 树莓派开发相关知识四 传感器-温湿度传感器
  • Java:数据结构-排序
  • Golang开发环境
  • STM32 HAL pe43xx衰减器使用教程
  • 【大语言模型】ACL2024论文-03 MAGE: 现实环境下机器生成文本检测
  • 中阳智能量化交易系统:构建高效金融未来
  • 有序序列合并(c语言)
  • 【Android】使用TextView实现按钮开关代替Switch开关
  • 【业务】opaytap支付测试文档
  • cursor连接远程jupyter
  • ubuntu中安装使用Geph