题目描述
一天zzq主持一项游戏,共n位同学,需要两两同学为一组来上台来玩一项游戏。
但是,众所周知,玩游戏的时候,如果两个人的颜值差距>=m,就会互相嫌弃。
所以,为了游戏能够好玩。在游戏开始前,zzq已经调查了所有n个同学的颜值。
但是现在问题又来了,zzq想知道,最多能凑出多少组同学一起上台?
需注意一人只能出现在一个组中。
输入描述:
多组输入 第一行两个正整数n m(n<=1e5,m<=1e9),意义见描述 第二行有n个由空格分开的正整数xi(xi<=1e9),第i个同学的颜值
输出描述:
每一行输出一个数,表示最多能凑出多少组。
示例1
输入
4 3 1 3 3 2 4 2 1 4 6 2
输出
2 1
说明
第二组样例中,编号为1的同学(颜值是1)与编号为4的同学(颜值是2),颜值差距为1,可以组成一组
答案展示
#include<bits/stdc++.h> // 包含 STL 的所有标准库头文件
using namespace std;
int main() {
int m, n, count = 0; // 声明 m (整数个数)、n (差值阈值) 和 count (计数器,用于统计符合条件的对数)
// 循环读取 m 和 n,直到输入结束
while (cin >> m >> n) {
vector<int> v; // 创建一个整型 vector 用于存储输入的整数
// 读取 m 个整数
for (int i = 0; i < m; i++) {
int num; // 声明临时变量 num
cin >> num; // 从输入读取一个整数
v.push_back(num); // 将读取的整数添加到 vector v 中
}
sort(v.begin(), v.end()); // 对 vector v 中的元素进行排序
// 遍历排序后的 vector,检查相邻元素的差值
for (int i = 0; i < m - 1; i++) {
// 如果相邻元素的差值小于 n,符合条件
if (v[i + 1] - v[i] < n) {
count++; // 满足条件,计数器加一
i++; // 跳过下一个元素,避免重复计数
}
}
cout << count << endl; // 输出符合条件的对数
count = 0; // 重置 count 为 0,为下一组输入准备
}
return 0; // 返回 0 表示程序正常结束
}
分布详解
包含头文件
#include<bits/stdc++.h>
using namespace std;
- 该代码包含了所有的标准库头文件,虽然在实际编码中,建议包含所需的具体头文件,以提高代码的可读性和编译速度。
主函数
int main(){
int m,n,count=0;
while(cin>>m>>n){
vector<int> v;
m
表示待处理的整数个数,n
是用于比较的阈值。count
用于统计满足条件的对数。while(cin>>m>>n)
表示程序会一直接收输入,直到输入结束。
输入数据
for(int i=0; i<m; i++){
int num;
cin >> num;
v.push_back(num);
}
- 创建一个
vector<int>
类型的变量v
,用于存储输入的整数。 - 循环读取
m
个整数,将它们存入 vectorv
。
排序
sort(v.begin(), v.end());
- 使用
std::sort
对 vectorv
中的元素进行排序,使得相邻元素之间的差值计算更为简单。
计算差值并计数
for(int i=0; i<m-1; i++){
if(v[i+1] - v[i] < n){
count++;
i++; // 如果找到了对,就跳过下一个元素,避免重复计数
}
}
- 通过循环遍历排好序的
v
,比较相邻元素v[i+1]
和v[i]
的差值。 - 如果差值小于
n
,则计数器count
增加,并将i
增加一次,以跳过下一个元素,防止将其与当前元素重复计数。
输出结果
cout << count << endl;
count = 0;
}
}
- 输出满足条件的对数
count
。 - 重置
count
为 0,以准备处理下一个输入对。
总结
输入数据
for(int i=0; i<m; i++){
int num;
cin >> num;
v.push_back(num);
}
排序
sort(v.begin(), v.end());
计算差值并计数
for(int i=0; i<m-1; i++){
if(v[i+1] - v[i] < n){
count++;
i++; // 如果找到了对,就跳过下一个元素,避免重复计数
}
}
输出结果
cout << count << endl;
count = 0;
}
}
总结
- 该程序的功能是处理多组整数输入,对于每组数据,计算并输出差值小于
n
的相邻整数对的数量。 - 注意这里的计数逻辑:一旦找到满足条件的一对相邻元素,就会跳过下一个元素,以避免重复计数。
while
循环允许程序处理任意数量的输入,直到输入结束。包含头文件
#include<bits/stdc++.h> using namespace std;
- 该代码包含了所有的标准库头文件,虽然在实际编码中,建议包含所需的具体头文件,以提高代码的可读性和编译速度。
-
主函数
int main(){ int m,n,count=0; while(cin>>m>>n){ vector<int> v;
m
表示待处理的整数个数,n
是用于比较的阈值。count
用于统计满足条件的对数。while(cin>>m>>n)
表示程序会一直接收输入,直到输入结束。- 创建一个
vector<int>
类型的变量v
,用于存储输入的整数。 - 循环读取
m
个整数,将它们存入 vectorv
。 - 使用
std::sort
对 vectorv
中的元素进行排序,使得相邻元素之间的差值计算更为简单。 - 通过循环遍历排好序的
v
,比较相邻元素v[i+1]
和v[i]
的差值。 - 如果差值小于
n
,则计数器count
增加,并将i
增加一次,以跳过下一个元素,防止将其与当前元素重复计数。 - 输出满足条件的对数
count
。 - 重置
count
为 0,以准备处理下一个输入对。 - 该程序的功能是处理多组整数输入,对于每组数据,计算并输出差值小于
n
的相邻整数对的数量。 - 注意这里的计数逻辑:一旦找到满足条件的一对相邻元素,就会跳过下一个元素,以避免重复计数。
while
循环允许程序处理任意数量的输入,直到输入结束。