zl程序教程

您现在的位置是:首页 >  后端

当前栏目

洛谷---P1102 A-B 数对---双指针算法

算法 --- 指针 洛谷
2023-09-14 09:12:40 时间

题目链接:
P1102 A-B 数对
题目描述:
在这里插入图片描述

双指针算法(快慢指针)算法

#include<iostream>
#include<algorithm>
#include<cstdio>

using namespace std;

typedef long long ll;

int n,c;
int arr[200020];

int main()
{
    scanf("%d %d",&n,&c);
    
    for(int i=1;i<=n;++i) cin>>arr[i];
    
    sort(arr+1,arr+1+n);
	//对输入的数组进行排序
    
    ll res=0;//因为数据使用int会撑爆,所以用ll
    //三个指针:快指针a,慢指针b1,b2;
    for(int a=1,b1=1,b2=1;a<=n;++a)
    {
        while(b1<=a && arr[a]-arr[b1]>=c ) b1++;
        
        while(b2<=a && arr[a]-arr[b2]>c ) b2++;
        
        res+=b1-b2;

    }
    printf("%lld",res);
    
    return 0;
}

总结:自己需要多模拟以及多练习这些题目,自己写还是写不出来的。