版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_37360631/article/details/88758013
分析:重新写了一遍,和先前不同的是,先前是遍历每个时间点,判断一段时间内是否存在满足id点赞次数多于K的。这次是遍历每一个id,记录每一个id的点赞时间点,遍历时间点,看是否存在点赞次数多于K的。
#include<bits/stdc++.h>
#define maxn 10000
using namespace std;
vector<int> e[11000];
int n,d,k;
int judge(int x){
int len=e[x].size();
if(len<k) return 0;
sort(e[x].begin(),e[x].end());
int l=0,r=0,ans=0;
while(l<=r&&r<len){
ans++;
if(ans>=k){
if(e[x][r]-e[x][l]<d){
return 1;
}
else{
l++,ans--;
}
}
r++;
}
return 0;
}
int main(){
std::ios::sync_with_stdio(false);
cin>>n>>d>>k;
for(int i=0;i<n;i++){
int ts,id;
cin>>ts>>id;
e[id].push_back(ts);
}
vector<int> ve;
for(int i=1;i<=maxn;i++){
int ans=judge(i);
if(ans==0) continue;
ve.push_back(i);
}
for(int i=0;i<ve.size();i++){
cout<<ve[i]<<endl;
}
return 0;
}
分析:去年的蓝桥杯一道题目,今年重新写了一遍还是超时。qaq,等下午从新写一下吧。
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
int n,k,d,ts,id;
int minn=inf,maxx=-inf;
vector<int> e[11000];
set<int> se;
int ha[11000],vis[11000];
int main(){
std::ios::sync_with_stdio(false);
cin>>n>>d>>k;
for(int i=0;i<n;i++){
cin>>ts>>id;
e[ts].push_back(id);
minn=min(minn,ts);
maxx=max(maxx,ts);
}
for(int i=minn;i+d<=maxx+100;i++){
memset(ha,0,sizeof(ha));
for(int j=i;j<i+d;j++){
for(int p=0;p<e[j].size();p++){
int tt=e[j][p];
if(!vis[tt]){
ha[tt]++;
if(ha[tt]>=k){
//cout<<tt<<endl;
se.insert(tt);
vis[tt]=1;
}
}
}
}
}
set<int>::iterator ite;
for(ite=se.begin();ite!=se.end();++ite){
cout<<*ite<<endl;
}
return 0;
}