• 洛谷P1102 A-B 数对题解


    题目

    A-B 数对

    题目背景

    出题是一件痛苦的事情!

    相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!

    题目描述

    给出一串正整数数列以及一个正整数 C C C,要求计算出所有满足 A − B = C A - B = C AB=C 的数对的个数(不同位置的数字一样的数对算不同的数对)。

    输入格式

    输入共两行。

    第一行,两个正整数 N , C N,C N,C

    第二行, N N N 个正整数,作为要求处理的那串数。

    输出格式

    一行,表示该串正整数中包含的满足 A − B = C A - B = C AB=C 的数对的个数。

    样例 #1

    样例输入 #1

    4 1
    1 1 2 3
    
    • 1
    • 2

    样例输出 #1

    3
    
    • 1

    提示

    对于 75 % 75\% 75% 的数据, 1 ≤ N ≤ 2000 1 \leq N \leq 2000 1N2000

    对于 100 % 100\% 100% 的数据, 1 ≤ N ≤ 2 × 1 0 5 1 \leq N \leq 2 \times 10^5 1N2×105 0 ≤ a i < 2 30 0 \leq a_i <2^{30} 0ai<230 1 ≤ C < 2 30 1 \leq C < 2^{30} 1C<230

    2017/4/29 新添数据两组

    传送门

    https://www.luogu.com.cn/problem/P1102

    代码

    #include // 包含所有常用的库文件
    using namespace std;
    long long n,c,a[200005],ans; // 声明变量
    
    int main() {
        map<int,int> m; // 创建一个空的映射对象 (map),用于统计元素个数
        cin >> n >> c; // 从标准输入读取n和c的值
    
        for(int i = 1; i <= n; i++) { // 从1循环到n
            cin >> a[i]; // 从标准输入读取一个整数,并赋值给数组a的第i个元素
            m[a[i]]++; // 使用映射对象m统计数组a中每个元素的个数
        }
    
        for(int i = 1; i <= n; i++) {
            ans += m[a[i] + c]; // 使用映射对象m查询数组a中与当前元素a[i]相差c的元素个数,并累加到变量ans中
        }
    
        cout << ans << endl; // 输出结果ans到标准输出
        return 0; // 程序正常结束的返回语句
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    解释

    1. #include:这是一个预处理指令,用于将所有常用的库文件包含进来,省去了手动添加每个库文件的麻烦。

    2. using namespace std;:使用了std命名空间,这样就可以直接使用C++标准库的函数和对象,而无需前缀std::

    3. long long n, c, a[200005], ans;:声明了整数变量n、c,一个长整型数组a,和一个长整型变量ans。

    4. int main() {:程序的入口函数。

    5. map m;:创建了一个名为mmap对象,键类型为整数int,值类型也为整数int

    6. cin >> n >> c;:从标准输入读取两个整数n和c,分别赋值给变量n和c。

    7. for(int i = 1; i <= n; i++) {:循环n次,每次执行以下代码块。

    8. cin >> a[i];:从标准输入读取一个整数,并将其赋值给数组a的第i个元素。

    9. m[a[i]]++;:将数组a的第i个元素的值作为键,对应的映射值加1。

    10. for(int i = 1; i <= n; i++) ans += m[a[i] + c];:循环n次,每次执行以下代码块。计算a[i] + c得到的值作为键,在map对象m中查找对应的映射值,并将其加到ans变量上。

    11. cout << ans << endl;:将ans的值输出到标准输出。

    12. return 0;:程序正常结束的返回语句。

    这段代码通过使用map数据结构来统计数组a中特定元素的个数,并根据给定的差值c计算符合条件的组合个数,并将结果输出。

    亲测

    亲测 AC
    在这里插入图片描述

  • 相关阅读:
    MES管理系统对印刷企业来说有什么优点
    CSS 动画特效运用目录
    [附源码]Python计算机毕业设计Django基于JAVA技术的旅游信息交互系统
    面试题——网址 (url) 的组成、url模块、querystring模块、mime模块、各种路径、静态资源托管、网页的加载流程
    Python函数
    线程的概念及使用
    Linux篇18多线程第二部分
    SpringBoot使用DevTools实现后端热部署
    从贝叶斯网络到SLAM
    Defensor 4.5:构建数据资产为中心的安全运营体系
  • 原文地址:https://blog.csdn.net/Python_enjoy/article/details/133488421