首页 > 其他分享 >P1102 A-B 数对

P1102 A-B 数对

时间:2024-02-14 11:55:23浏览次数:29  
标签:P1102 int res scanf 数对 long ++ rm

题目链接:

一开始的想法:排序后枚举,但这样显然是 \(O(n^2)\) 的复杂度,会超时

#include <cstdio>
#include <algorithm>

const int N = 2e5 + 5;

int a[N];

int main()
{
    int n, c, res = 0;
    scanf("%d%d", &n, &c);
    for (int i = 0; i < n; i++) scanf("%d", &a[i]);
    std::sort(a, a + n);
    for (int i = 0; i < n - 1; i++) {
        for (int j = i + 1; j < n; j++) {
            if (a[j] - a[i] == c) res++;
        }
    }
    printf("%d", res);
    return 0;
}

优化方式一: \(\rm map映射\) \(O(n)\)

将 \(A-B=C\) 变形为 \(A-C=B\)。用 \(\rm map\) 记录数组中每个元素的出现次数然后将每个元素都减去 \(c\),最后再遍历一遍数组求出当前所有元素分别在 \(\rm map\) 中的次数之和(即这些元素在原数组中的出现次数)。由于最坏情况可能达到 \(10^{10}\) 会爆 \(\rm int,\)因此要用 \(\rm long\) \(\rm long\)

#include <bits/stdc++.h>

using namespace std;
using LL = long long;

const int N = 2e5 + 5;

int a[N];
map<int, int> p;

int main()
{
    int n, c;
    LL res = 0;
    scanf("%d%d", &n, &c);
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]);
        p[a[i]]++;
        a[i] -= c;
    }
    for (int i = 0; i < n; i++) 
        res += p[a[i]];
    printf("%lld", res);
    return 0;
}

标签:P1102,int,res,scanf,数对,long,++,rm
From: https://www.cnblogs.com/pangyou3s/p/18015111

相关文章

  • P1102 A-B 数对
    原题链接解法一:二分搜素首先我们知晓A-B=C,那么A=B+C,我们只需要遍历数组中的每一个元素然后在数组中搜素a[i]+c的值是否存在即可。Code #include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintN=2e5+5;lla[N];intmain(){intn,c;l......
  • PAT-乙级-1007(素数对猜想)
    让我们定义dn​为:dn​=pn+1​−pn​,其中pi​是第i个素数。显然有d1​=1,且对于n>1有dn​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。现给定任意正整数N(<105),请计算不超过N的满足猜想的素数对的个数。输入格式:输入在一行给出正整数N。输出格式:在一行中......
  • 35 函数对象分析
    编写一个函数获取斐波那契数列每一项的值。每调用一次返回一个值。函数可以根据需要重复使用。第一次尝试:#include<iostream>#include"add.h"usingnamespacestd;intfib(){staticinta0=0;staticinta1=1;intret=a1;a1=a0+a1;......
  • SQLServer和Oracle常用函数对比
      1.绝对值 S:select abs(-1) value O:select abs(-1) value from dual 2.取整(大) S:select ceiling(-1.001) value O:select ceil(-1.001) value from dual 3.取整(小) S:select floor(-1.001) value O:select flo......
  • 子函数对指定文件指的读取指定的行(ReadLine.bat)
    经常要对文件的指定行进行读取,特写了一个读取文件指定行的小程序段(ReadLine.Bat),方面以后调用。使用也比较简单:"CallReadLine<文件名><跳过的行数><读取行数>"就可以了。比如在一个批处理里加上一句"CallReadLinea.txt57",那么将跳过a.txt文件的前5行,显示下面的7行字......
  • P1102 A-B 数对
    1.题目介绍A-B数对题目背景出题是一件痛苦的事情!相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的A+BProblem,改用A-B了哈哈!题目描述给出一串正整数数列以及一个正整数\(C\),要求计算出所有满足\(A-B=C\)的数对的个数(不同位置的数字一样的数对算不同的数......
  • STL—函数对象
    函数对象概念1、重载函数调用操作符的类,其对象常称为函数对象2、函数对象使用重载的()时,行为类似函数调用,也叫仿函数本质函数对象(仿函数)是一个类,不是一个函数函数对象的使用特点:1、函数对象在使用时,可以像普通函数那样调用,也可以有参数,可以有返回值2、函数对象超出普通函数的概念,函......
  • 【C++】STL 算法 ② ( foreach 循环中传入 函数对象 / Lambda 表达式处理元素 | forea
    文章目录一、foreach循环中传入函数对象/Lambda表达式处理元素1、foreach循环算法2、foreach循环中传入函数对象处理元素3、foreach循环中传入Lambda表达式处理元素4、Lambda表达式-匿名函数对象/仿函数一、foreach循环中传入函数对象/Lambda表达式处理......
  • STL-函数对象和谓词
    2STL-函数对象2.1函数对象2.1.1函数对象概念概念:重载函数调用操作符的类,其对象常称为函数对象函数对象使用重载的()时,行为类似函数调用,也叫仿函数本质:函数对象(仿函数)是一个类,不是一个函数2.1.2函数对象使用特点:函数对象在使用时,可以像普通函数那样调用,可以有参数,可以有返......
  • python高级之函数对象与闭包函数
    函数对象和闭包函数函数对象1,什么是函数对象?函数对象简单理解就是将函数当变量来使用。如下图所示:定义一个函数可以简单的理解为:func=函数体内存地址函数名+()–>调用函数函数名-->函数对象,函数名不加括号此时的函数名就是函数对象函数用于赋值将函数赋值给某个变......