本题思路:
首先暴力但是复杂度是n*T的,所以我们要优化:由于我们把有记录和没有记录的时间点都遍历了一遍,自然浪费时间,所以我们可以只查找这家店有记录的时间点,没有用的点,我们用减法就能求出。
注意:由于所有的店铺都相互之间是没有关联的。所以分开单独求。
时间节点是有顺序的,所以我们需要排序。
Code
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+10,M=1e3+10;
int main(){
int n,m,T;
cin>>n>>m>>T;
vector<vector<int>>st(n+10);
for(int i=1;i<=m;i++){
int ts,id;
cin>>ts>>id;
st[id].push_back(ts);
}
int ans=0;
for(int i=1;i<=n;i++){
sort(st[i].begin(),st[i].end());
auto k=st[i];
long long kkksc_03=0,last=0;
long long flag=0;
for(long long j=0;j<k.size();j++){
long long tmp=k[j]-last-1;
if(last==0||last==k[j]){
tmp=0;
}
kkksc_03-=tmp;
kkksc_03=max(0ll,kkksc_03);
if(kkksc_03<=3){
flag=0;
}
kkksc_03+=2;
if(kkksc_03>5){
flag=1;
}
last=k[j];
}
if(last!=T){
kkksc_03-=(T-last);
}
if(kkksc_03>3&&flag){
ans++;
}
}
cout<<ans<<endl;
return 0;
}