问题标题: 1772题 0分 怎么错了?

0
0
已解决
栾峻岩
栾峻岩
初级天翼
初级天翼
#include <iostream>
#include <cmath>
using namespace std;
int a[200000];
int main()
{
    int n,m,num;
    cin>>n>>m;
    for (int i=1;i<=n;i++)
        cin>>a[i];
    for (int i=1;i<n;i++)
    {
        for (int j=i+1;j<=n;j++)
        {
            if (abs(a[i]-a[j])==m)
                num++;
        }
    }
    cout<<num<<endl;
    return 0;
}

求各位大佬帮帮忙吧!Please!!!

栾峻岩在2018-01-14 18:04:47追加了内容

#include <iostream>
#include <cmath>
using namespace std;
int a[200000],b[200000];
int main()
{
    int n,m,num;
    cin>>n>>m;
    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])
    {
        num+=b[a[i]+m];
    }
    cout<<num;
    return 0;

}  还是0分 @陆麟瑞 

栾峻岩在2018-01-14 18:05:18追加了内容

1772   A - B = C

题目描述 Description

给定 n 个数 ai,以及一个正整数 c ,问有多少对 i j,满足 ai - aj = c

输入描述 Input Description

第 1 行:整数 n 和 c
第 2 至 n+1 行:每行包含一个整数 ai

输出描述 Output Description

输出能满足 ai - aj = c 的数的对数

样例输入 Sample Input


 

5 3
2
1
4
2
5

样例输出 Sample Output


 

3

数据范围及提示 Data Size & Hint

n <= 200000,所有数字保证在32位有符号整型内。


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

这道题是用二分的,但也可以用桶来写,因为a数组太大,无法用普通数组,所以就要用到map数组。

用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]+m];
    }
    cout<<s;

头文件 #include <map>

b的定义

map<int,int>b;
1
梁锦程
梁锦程
高级光能
高级光能

这道题考虑后面数据比较大两重循环容易超时,所以可以利用桶排序的思想

for(i=1;i<=n;i++)
        b[a[i]+c]++;
for(i=1;i<=n;i++)
        num+=b[a[i]];
cout<<num;

如果还不对,请追问,望采纳!!

0
0
0
0
栾峻岩
栾峻岩
初级天翼
初级天翼

@杨喆  @贾敬波 @葛新  @陆麟瑞 @许正全 帮帮忙,看一下。

0
0
0
-1
王祥润
王祥润
新手守护
新手守护

for (int i=1;i<=n;i++)

 

cin>>a[i];//这有问题哦

改成:cin >> a[i] >>endl; 就可以了哦

-4
刘睿轩
刘睿轩
中级光能
中级光能

for (int i=1;i<=n;i++)

 

cin>>a[i];//这有问题哦

改成:cin >> a[i] >>endl; 就可以了哦

我要回答