初级天翼
#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位有符号整型内。
资深天翼
这道题是用二分的,但也可以用桶来写,因为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;
高级光能
这道题考虑后面数据比较大两重循环容易超时,所以可以利用桶排序的思想
for(i=1;i<=n;i++)
b[a[i]+c]++;
for(i=1;i<=n;i++)
num+=b[a[i]];
cout<<num;
如果还不对,请追问,望采纳!!
初级天翼
新手守护
for (int i=1;i<=n;i++)
cin>>a[i];//这有问题哦
改成:cin >> a[i] >>endl; 就可以了哦