列表

详情


NC240554. 清楚姐姐的学术群

描述

清楚姐姐有一个学术群,为了使这个群有学术的风气,她建立了一些群规。

这个学术群有 n 个人,编号

总共发了 m 条消息。

以及两个参数 a,b

每条消息由一个人发出来的,且分为水和不水。

如果在某一条消息,它以及它之前的 a-1 条消息(共 a 条消息)都是在水(不管是不是同一个人发的),那么发这条消息的人就会受到神秘惩罚。

如果一个人,在任意一条消息之前,他发的最后 b 条消息(包括这条)都是在水,那么这个人也要受到神秘惩罚。

现在树剖姐姐想要知道,有哪些人会受到神秘惩罚。

输入描述

第一行,四个正整数n,m,a,b 

后面 m 行,每行两个整数,表示一条消息。

p_i表示第 p_i 个人发消息的,表示这条消息是在水,表示这条消息不是在水。

输出描述

第一行一个数x,表示有x个人受到了神秘惩罚。

第二行x个数,从小到大排列,输出所有受到神秘惩罚的人的编号。

如果没有人收到神秘惩罚,只用输出 0

示例1

输入:

5 9 3 2
1 1
2 1
3 1
4 1
3 0
1 0
1 1
5 1
2 1

输出:

3
2 3 4

示例2

输入:

2 3 2 2
1 0
2 0
1 0

输出:

0

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++ 11.0.1) 解法, 执行用时: 134ms, 内存消耗: 1768K, 提交时间: 2022-09-02 21:54:28

#include<bits/stdc++.h>
using namespace std;
const int N=3e5+5;
int n,m,a,b,p,t,tt,s[N];
int main()
{
    cin>>n>>m>>a>>b;
    set<int> v;
    while(m--)
    {
        cin>>p>>t;
        if(t) tt++,s[p]++;
        else tt=0,s[p]=0;
        if(tt>=a||s[p]>=b) v.insert(p);
    }
    cout<<v.size()<<endl;
    for(auto i:v) cout<<i<<' ';
}

上一题