问题标题: 酷町堂:1610

0
0
已解决
张睿杰
张睿杰
初级天翼
初级天翼

1610   problem(M-N=P)

题目描述 Description

给你A 个从小到大排好序的整数,一个数P,要求在这A个整数中找两个数M和N,使得M-N=P,问你能找到多少种这样的方案?

输入描述 Input Description

第一行:2 个正整数:A,P。
第二行:N个顺序整数。

输出描述 Output Description

一个整数,表示该串数中包含的所有满足M-N=P 的数对的方案数。

样例输入 Sample Input

4 1
1 1 2 2

样例输出 Sample Output

4

数据范围及提示 Data Size & Hint

对于50% 的数据:A 的范围是[1…1,000]。

对于另外50% 的数据:A 的范围是[1…100,000]。

对于100% 的数据:P的范围是[1…1,000,000,000],A 个整数中每个数的范围是:[0…1,000,000,000]。

 

不准说要打牢基础,用数组一类话


0
已采纳
陆麟瑞
陆麟瑞
资深天翼
资深天翼

这道题要用到map来写,具体与桶的思路一样直接模拟和乘法原理就行了。

 for(int i=1; i<=n; i++)
    {
        cin>>a[i];
        b[a[i]]++;//累加
    }
    for(int i=1; i<=n; i++)
    if(b[a[i]-m])
    {
        s+=b[a[i]]*b[a[i]-m];
        b[a[i]]=0;
    }

输出s

b不是数组!!!是这样定义的:

map<int,int>b;

头文件是#include <map>

0
0
0
黄昊轩
黄昊轩
新手守护
新手守护
if (a[i] > x)
            {
                for (j = n+1; j >= i; j--)
                {
                    a[j ] = a[j-1];
                }a[i] = x;
            }
0
0
我要回答