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

P1102 A-B 数对

时间:2024-02-10 18:55:26浏览次数:25  
标签:P1102 int ll 数对 long 数组 r1

原题链接

解法一:二分搜素

首先我们知晓A-B=C,那么A=B+C,我们只需要遍历数组中的每一个元素然后在数组中搜素a[i]+c的值是否存在即可。

Code

 

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
ll a[N];
int main(){
    int n,c;
    ll sum=0;
    cin>>n>>c;
    map<ll,int> map1;
    for (int i=1;i<=n;i++){
        cin>>a[i];
        map1[a[i]]++;
    }
    for (int i=1;i<=n;i++)
        if (map1.count(c+a[i])) sum+=map1[c+a[i]];
        cout<<sum<<endl;
}

 

解法二:双指针

我们先将数组按照非降序排列,我们用r1表示a[r1]-a[i]<c;r2表示a[r2]-a[i]<=c;那么对于每个a[i]我们只在需要sum+=r2-r1即可

Code

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
int a[N];
int main(){
    int n,c;
    ll sum=0;
    cin>>n>>c;
    for (int i=1;i<=n;i++) cin>>a[i];
    sort(a+1,a+n+1);
    int r1=1,r2=1;
    for (int i=1;i<=n;i++){
        while (r1<=n && a[r1]-a[i]<c) r1++;
        while (r2<=n && a[r2]-a[i]<=c) r2++;
        sum+=r2-r1;
    }
    cout<<sum<<endl;
}

Ps:如果a数组本身就是非降序的话,法二时间复杂度只有O(n)

 

标签:P1102,int,ll,数对,long,数组,r1
From: https://www.cnblogs.com/purple123/p/18012978

相关文章

  • 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=函数体内存地址函数名+()–>调用函数函数名-->函数对象,函数名不加括号此时的函数名就是函数对象函数用于赋值将函数赋值给某个变......
  • 【python基础之函数对象和闭包】 --- 函数对象与闭包
    title:【python基础之函数对象和闭包】---函数对象与闭包date:2023-12-1119:20:00updated:2023-12-1119:20:00description:cover:https://home.cnblogs.com/u/dream-ze/【一】函数对象函数对象指的是函数可以被当做数据来处理具体可以分为四......