AcWing 1238. 日志统计
原题链接
中等
作者:
Nevdie_
,
2021-03-17 22:12:35
,
所有人可见
,
阅读 592
双指针遍历
#include <iostream>
#include <algorithm>
#define id first
#define ts second
using namespace std;
const int N = 1e5 + 10;
typedef pair<int, int> PII;
PII post[N]; // 第一个值id,第二个值是ts
int n, d, k;
int main()
{
scanf("%d%d%d", &n, &d, &k);
for(int i = 0; i < n; i++) scanf("%d%d", &post[i].ts, &post[i].id);
sort(post, post + n); //将同一id的帖子放在一起,且以得到点赞的时刻升序排列
for(int i = 0, j = 0; i < n; ) //i指针每次指向某个id第一次得到点赞的位置
{
//若从i开始的k个帖子id是否相同,且时间间隔小于d
if (post[i].id == post[i + k - 1].id && post[i + k - 1].ts - post[i].ts < d)
{
printf("%d\n", post[i].id);
j = i + k;
while(post[j].id == post[i].id) j ++; //跳到下一个id不同的帖子
i = j;
}
else if (post[i].id != post[i + k - 1].id) i = i + k - 1; //若不足k个帖子,直接跳到下一个id不同的帖子
else i ++; //若时间间隔大于d,从下一个帖子开始
}
return 0;
}
增强数据之后过不了了
代码已优化
牛
兄弟你没有填邀请码可以填一个,都可以得AC币!嘿嘿,谢谢兄弟
我的邀请码是:GUDFH