洛谷 P8661 详解

P8661
主要知识点:结构体,sort倒排,自定义函数,循环结构

点击查看代码
#include<bits/stdc++.h>
using namespace std;
struct node{()
	int a,b;
}a[100005];
int n,d,k;
int cmp(node x,node y){
	if(x.b!=y.b)return x.b<y.b;
	return x.a<y.a;
}
int possible(int x,int y){
	int r=x;
	for(int i=x;i<=y;i++){
		while(a[r+1].a-a[i].a<d&&r<y)r++;
		if(r-i+1>=k)return 1;
	}
	return 0;
}//需要的函数:判断长度D时间段的K
int main()
{
	cin>>n>>d>>k;
	for(int i=1;i<=n;i++){
		cin>>a[i].a>>a[i].b;
	}
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++){
		int r=i;
		while(a[r+1].b==a[i].b)r++;
		if(possible(i,r)){ 
			cout<<a[i].b<<endl;
		}
		i=r;
	}
	return 0;
}

结构体方便输入ts&&id
函数possible判断“现在小明想统计有哪些帖子曾经是“热帖”。如果一个帖子曾在任意一个长度为 D 的时间段内收到不少于 K 个赞,小明就认为这个帖子曾是“热帖”。”
当然,主函数也有操作:
“首先,输入N、D 和 K;
然后,a数组;
接着,排序!!!
最后,一重循环调用possible,完美解决问题!

注:本人已提交,AC
祝你们马到成功!

posted @ 2025-07-21 18:46  烈空坐  阅读(6)  评论(0)    收藏  举报