Aventurine_stone
2024-11-15 21:49:06
一道简单排序加字符串哈希的题,我很懒所以用的 unordered_map。
就是要注意一下题目中的老化期,也就是
首先就是在读入时用 unordered_map 将字符串转化为一个数字,方便计算。之后以时间点为关键字从小到大排序。
我们要用一个数组
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
inline int read()
{
int x=0;
char c=getchar();
while(c<'0'||c>'9')
c=getchar();
while(c>='0'&&c<='9')
x=(x<<1)+(x<<3)+c-'0',c=getchar();
return x;
}
int n,k,cnt;
unordered_map<string,int>ls;
struct node{
int id,t;
}a[N];
inline bool cmp(node a1,node a2)
{
return a1.t<a2.t;
}
int v[N],num,l,mx;
int main()
{
n=read(),k=read();
for(int i=1;i<=n;i++)
{
string s;
cin>>s;
ls[s]?1:ls[s]=++cnt;
a[i]={ls[s],read()*60+read()};
}
sort(a+1,a+n+1,cmp);
l=1,v[a[1].id]=num=mx=1;
for(int i=2;i<=n;i++)
{
while(l<i&&a[l].t+k<=a[i].t)
v[a[l].id]--,num-=!v[a[l].id],l++;
num+=!v[a[i].id];
v[a[i].id]++;
mx=max(mx,num);
}
printf("%d",mx);
return 0;
}