T266160 [NMOI-J 2022] 神の繁星 题解

题目背景

繁星之神有$n$颗星星。

每一颗星星都有它的年龄,当每颗星星到达$c$岁后,就因为坍缩而无论如何也无法发出空间之神徵御铉可以看见的光了(即空间之神徵御铉看不见这颗星星)。

由于这些星星非常懒惰,自己不愿意发光。于是繁星之神会选出一颗 $x$ 岁的星星来当繁星的领袖,来引导其他星星一起发光。当它发光时,其他所有满足条件的星星会在他的引领下和它一起发光。

但是,这颗星星的能力有限,仅能带动跟它年龄差不超过$y$岁的星星发光。

现在数学极好的徵御铉想知道,这颗星星能带动几颗星星发光(数星星的时间忽略不计)。

输入格式

第一行输入四个数字 $n,x,y,c$。
第二行输入 $n$ 个数字 $ai$,分别代表每颗星星的年龄。

输出格式

输出徵御铉数出的星星个数(即他可以看见多少星星)。

样例 #1

样例输入 #1

1
2
5 7 3 10
6 8 3 10 11

样例输出 #1

1
2

提示

对于 $100%$ 的数据,保证 $1≤n≤10^6,1≤x,y≤10^9,c≤10^9,x>y,1\le\forall ai ≤10^9$。

题意分析

本题来源:甚至你们有些人都写过:牛客儿童节比赛-孩子王

本题题意:

条件有三

  1. 星星与领袖的年龄差$\leq y$
  2. 星星的年龄$< c$;
  3. $\color{Red}{领袖的年龄< c}$

上代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include<iostream>
using namespace std;
int abs(int value){return value < 0?-value:value;}
int main(){
int n,x,y,c,age,ans=0;
cin>>n>>x>>y>>c;
if(x>=c){
cout<<0;
return 0;
}
for(int i = 1;i<=n;i++){
cin>>age;
if(abs(age-x)<=y&&age<c){
ans++;
}
}
cout<<ans;
}

.