[牛客]主持人的烦恼

题目描述

一天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 个整数,将它们存入 vector v

排序

        sort(v.begin(), v.end());
  • 使用 std::sort 对 vector v 中的元素进行排序,使得相邻元素之间的差值计算更为简单。

计算差值并计数

        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 个整数,将它们存入 vector v
  • 使用 std::sort 对 vector v 中的元素进行排序,使得相邻元素之间的差值计算更为简单。
  • 通过循环遍历排好序的 v,比较相邻元素 v[i+1] 和 v[i] 的差值。
  • 如果差值小于 n,则计数器 count 增加,并将 i 增加一次,以跳过下一个元素,防止将其与当前元素重复计数。
  • 输出满足条件的对数 count
  • 重置 count 为 0,以准备处理下一个输入对。
  • 该程序的功能是处理多组整数输入,对于每组数据,计算并输出差值小于 n 的相邻整数对的数量。
  • 注意这里的计数逻辑:一旦找到满足条件的一对相邻元素,就会跳过下一个元素,以避免重复计数。
  • while 循环允许程序处理任意数量的输入,直到输入结束。
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值