[GDKOI]交换机

题目描述

Moon 正在准备计算机网络的开学考,复习到了有关交换机的知识。交换机具有令人惊奇的特性那就是 它的表是自动、动态和自治地建立的,即没有来自网络管理员或来自配置协议的任何干预。换句话说,交换 机是自学习的。这种能力大概是通过如下方式实现的:

1)交换机表初始为空。

2)对于在每个接口接收到的每个数据帧,该交换机在其表中存储数据帧的源 MAC 地址。

3)如果在一段时间 (称为老化期) 后,交换机没有接收到含有某个源 MAC 地址的数据帧,就会在表中删 除这个源 MAC 地址。

现在给出了某天中一个交换机所有收到的数据帧(每一个数据帧包含一个源 MAC 地址,以及该数据帧 的到达时间),请你帮助 Moon 算出在这一天中,这个交换机的表最少需要多少项,才可以使得这天所有数据 帧的信息可以存储下来。注意为了简单起见,每个时间点先进行删除操作再进行插入操作注意为了简单起见,每个时间点先进行删除操作再进行插入操作。

简单来说,需要维护一个字符串集合 S,有若干次插入操作,每次插入操作包含一个字符串以及一个有 效时间区间(区间长度为定值),需要求出所有时间内,字符串集合 S 大小的最大值。

输入格式

第一行两个整数 n,k,分别表示数据帧的个数,以及老化期时间(单位:分钟)。

接下来 n 行,每行两个字符串s1​,s2​,表示数据帧包含的源地址帧,以及到达时间,其中 s1​ 是一个 MAC 地址,包含 12 个 16 进制数,s2​ 的格式为 a:b,其中0≤a≤23,0≤b≤59,表示该数据帧在 a 时 b 分钟 00 秒到达交换机,并且 a,b 不足 10 的数字前面要补充一个零。

输出格式

一行,一个整数,代表答案

输入样例1
4 10
0123456789ABCDEF 00:10
0000000000ABCDEF 08:11
0123456789ABCDEF 00:15
0000000000ABCDEF 00:11

输出样例1
2

输入样例2
3 60
0123456789ABCDEF 13:00
0000000000000000 14:00
0123456789ABCDEF 12:30

输出样例2
1

代码

#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5,M=3800;
struct uuu{
	string s,s2;
	long long st,en;
}a[N];
long long ti[M];
map <string,long long> mp;
long long getnum(string s)
{
	long long ans=0;
	ans=((s[0]-48)*10+(s[1]-48));
	ans*=60;
	ans+=((s[3]-48)*10+(s[4]-48));
	return ans;
}
bool cmp(uuu b,uuu c)
{
	return b.st<c.st;
}
int main()
{
	long long n,k;
	cin>>n>>k;
	string s,s2;
	for(long long i=1;i<=n;i++)
	{
		cin>>a[i].s>>a[i].s2;
		a[i].st=getnum(a[i].s2);
		a[i].en=a[i].st+k;
	}
	sort(a+1,a+1+n,cmp);
	for(long long i=1;i<=n;i++)
	{
		if(mp[a[i].s]+k>=a[i].st)
		{
			ti[mp[a[i].s]+k]++;
			ti[a[i].en]--;
		}else
		{
			ti[a[i].st]++;
			ti[a[i].en]--;
		}
		mp[a[i].s]=a[i].st;
	}
	long long sum=0,maxn=0;
	for(long long i=0;i<=1500;i++)
	{
		sum+=ti[i];
		maxn=max(maxn,sum);
	}
	cout<<maxn;
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值