本文主要是介绍FDU 2020 | 3. 打地鼠,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 1. 题目描述
- 2. 我的尝试
1. 题目描述
给定 n 个整数 a 1 , a 2 , . . . , a n a_1, a_2, ..., a_n a1,a2,...,an 和一个 d d d,你需要选出若干整数,使得这些整数从小到大排序后,任意两个相邻的数之差都不小于给定的 d d d ,问最多可选出多少个数。
输入格式
第一行输入两个整数 n , d ( 1 ≤ n ≤ 1 0 5 , 0 ≤ d ≤ 1 0 9 ) n, d (1 \leq n \leq 10^5, 0 \leq d \leq 10^9) n,d(1≤n≤105,0≤d≤109),分别表示整数个数和相邻整数差的下届。
第二行 n n n 个整数 a 1 , a 2 , . . . , a n ( 1 ≤ a i ≤ 1 0 9 , 1 ≤ i ≤ n a_1, a_2, ..., a_n (1 \leq a_i \leq 10^9, 1 \leq i \leq n a1,a2,...,an(1≤ai≤109,1≤i≤n,表示给定的 n n n 个整数。
输出格式
一个整数,表示答案
样例输入
6 2
1 4 2 8 5 7
样例输出
3
2. 我的尝试
#include <bits/stdc++.h>using namespace std;
const int INF = 0x3f3f3f3f;int main() {int n, d;int last = -INF;int res = 0;vector<int> nums;cin >> n >> d;for (int i = 0; i < n; i++) {int x;scanf("%d", &x);nums.push_back(x);}sort(nums.begin(), nums.end());for (int i = 0; i < n; i++) {if (nums[i] >= last + d) {res ++;last = nums[i];}}cout << res;return 0;
}
这篇关于FDU 2020 | 3. 打地鼠的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!