1.12总结

该程序首先通过快速排序对数组进行排序,然后使用双指针技巧(l,r)来统计满足A=B+C条件的数对(A,B)数量。在排序后的数组中,从左向右移动右指针r,同时更新左指针l,计算相同A值的个数和符合条件的B值的个数,将这两个数相乘累加到总组合数中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

A-B 数对

已知A=B+C,我们既可以找A,也可以找B,用 l 指向A,r指向B,这样我们统计a[l]=a[r]+c的个数;

对数组进行排序后,从左往右寻找A,这样r,l都是不断增大,统计相同A和B的个数,相乘得到组合

#include<stdio.h>
int a[200001];
void quick(int x,int y)
{
    int i,j;
    i=x;j=y;
    int t=a[(x+y)/2];
    while(i<=j)
    {
        while(a[i]<t) i++;
        while(a[j]>t) j--;
        if(i<=j)
        {
            int m=a[i];
            a[i]=a[j];
            a[j]=m;
            i++;
            j--;
        }
    }
    if(x<j) quick(x,j);
    if(i<y) quick(i,y);
}
int main()
{
    int n,c,l=0,r=1;
    long long num=0,numl,numr;
    scanf("%d %d",&n,&c);
    for(int i=1;i<=n;i++)
    {
        scanf("%d ",&a[i]);
    }
    quick(1,n);
    while(r<=n)
    {
        numl=1;numr=0;
        l++;
        while(a[l]==a[l+1]&&l<=n)
        {
            l++;
            numl++;
        }
        while(r<=n&&a[r]<a[l]+c)
        {
            r++;
        }
        while(r<=n&&a[r]==a[l]+c)
        {
            numr++;
            r++;
        }
        num += numr * numl;
    }
    printf("%lld",num);
}

HTML列表<li></li>

有序列表,无序列表,自定义列表

有序列表<ol>(容器标签),包含列表内容标签(<li>)

type选择列表样式,默认为1,2...

<ol type='A'>
    <li>abc</li>
    <ol type='I'>
        <li>abc</li>
        <li>abc</li>
    <ol>   
    <li>abc</li>
<ol>

效果

如果type选择A,那么第27,27个元素为AA,AB,类推

无序列表<ul>用法同上

自定义列表:<dl>(容器标签)<dd>(内容标签)<dt>(标题)

效果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值